[英]Determine if any 2D polygon (including convex or concave polygons) intersects with AABB bounding
[英]Is this Edge of a 3D solid Concave or Convex?
给定3D实体模型和边缘,我正在测试该边缘是凹面还是凸面。
做这个的最好方式是什么? 我想最小化关于输入几何形状的假设。 我对问题的第一遍是获取两个相邻面的顶点的平均值以生成中心点,然后用该点处的面法线偏移这些点中的一个,然后测试偏移点是否比相对的面更接近或更远原本的。 这适用于大约相同大小的成对的简单面孔。 例如,当小脸远离大脸中心时,它会失败。
我正在Revit中进行此操作,但我想问题出在任何实体建模师Rhino,Catia上也是一样。 我可以从边缘提取相邻的面。 我知道这些面孔的方向正确,因此法线指向外部。 我可以将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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.