我在numpy中有一個點(diǎn)云坐標(biāo)。對于大量點(diǎn),我想找出這些點(diǎn)是否位于點(diǎn)云的凸包中。我嘗試了pyhull,但是我不知道如何檢查點(diǎn)是否在ConvexHull:hull = ConvexHull(np.array([(1, 2), (3, 4), (3, 6)]))for s in hull.simplices: s.in_simplex(np.array([2, 3]))引發(fā)LinAlgError:數(shù)組必須為正方形。
3 回答

紅顏莎娜
TA貢獻(xiàn)1842條經(jīng)驗 獲得超13個贊
我不確定如何使用您的程序庫來實(shí)現(xiàn)這一目標(biāo)。但是有一種簡單的算法可以用語言來實(shí)現(xiàn):
創(chuàng)建一個絕對不在您的船體之外的點(diǎn)。叫Y
產(chǎn)生將您的問題點(diǎn)(X)連接到新點(diǎn)Y的線段。
環(huán)繞凸包的所有邊緣線段。檢查每個線段是否與XY相交。
如果您計算的相交數(shù)為偶數(shù)(包括0),則X在船體之外。否則,X在船體內(nèi)部。
如果發(fā)生這種情況,則XY穿過您在船體上的一個頂點(diǎn),或直接與您船體的一個邊緣重疊,將Y稍微移動一點(diǎn)。
以上也適用于凹面船體。您可以在下圖中看到(綠色點(diǎn)是您要確定的X點(diǎn)。黃色標(biāo)記相交點(diǎn)。
添加回答
舉報
0/150
提交
取消