0
給定一個三維實體模型和一個邊,我測試這個邊是凹的還是凸的。這是一個三維固體邊緣凹或凸?
這樣做的最好方法是什麼?我想盡量減少有關輸入幾何的假設。我在這個問題上的第一次傳球需要兩個相鄰人臉的頂點的平均值生成中心點,用這個點上的人臉法線偏移其中一個點,然後測試偏移點離對面人臉的距離是否更接近或更遠原本的。這適用於大小相同的簡單面對。例如,它失敗了,面對遠離較大面部中心的小面。
我在Revit中這樣做,但我想象的問題是犀牛,卡蒂亞,任何可靠的建模者都一樣。從邊緣我可以提取相鄰的面。我知道面孔的方向是正確的,法線指向外面。我可以預測3D點到面,在這些點計算的面孔法線等
下面是幼稚版本的代碼:
public static Boolean AreFacesConcave(Face face_0, Face face_1, Document doc)
{
UV uvMid_0 = VertexAverageUV(face_0); //3D average of the vertices
UV uvMid_1 = VertexAverageUV(face_1); // approximates the center of the face
XYZ pt_0 = face_0.Evaluate(uvMid_0);
XYZ pt_1 = face_1.Evaluate(uvMid_1);
// normals at those points
XYZ normal_0 = face_0.ComputeNormal(uvMid_0);
XYZ normal_1 = face_1.ComputeNormal(uvMid_1);
// third point, offset from face 2 by normal
XYZ pt_2 = pt_1.Add(normal_1.Normalize());
Double d0 = pt_0.DistanceTo(pt_1);
Double d1 = pt_0.DistanceTo(pt_2);
return (d1 < d0);
}