繁体   English   中英

在3D中找到三角形的左/右顶点

[英]Finding left/right vertices to a point in a triangle in 3D

给定3D三角形,并且在其边缘之一上有一个点,我想找出该边缘的哪个顶点在该点的左侧,而哪个在右侧。

请参见下图:

在此图像中,顶点v2v3始终如图所示放置。 v3v2之间还有一条线段。 问题是顶点v0v1可能以交换顺序给出。 我想找出v0是位于v3的“左侧”还是“右侧”,以便我可以强制v0始终位于其左侧,而v1始终位于其右侧。

由于此问题在3D中,因此我不确定如何有效地计算顶点的相对位置。 我是否首先将其简化为二维问题(如果可以的话,如何解决)还是有其他方法?

在3d中,“左”和“右”取决于观察者的位置(以下称为此位置P )。 想象一下,您正在从另一侧查看该三角形,然后左右颠倒了。 因此,从位置P观察时,您需要确定顶点是顺时针还是逆时针。

为此,您可以计算出以下内容:

N = normalize( cross( v0 - v2, v1 - v2 ) );
PV = normalzie( P - v2 );
if( dot( PV, N ) > 0.0 )
{
    //anticlockwise , so you are viewing the picture like in your drawing, then v0 is on the left of vector v3v2, and v1 is on the right
}
else
{
    //clockwise, v0 is on the right
}

请注意,如果dot积几乎为/或0,则P与三角形位于同一平面上。

如评论中所阐明的,“ left”和“ right”(或v0v1任何其他顺序)取决于某些参考。 您提到您知道三角形的法线向量(称为N )-可以用作此类参考。

假设法向矢量指向示例图像中的查看器。 然后,计算v2 - v3v0 - v3的向量积。 这将指向与法线相同的半空间(意味着v0在“左侧”),或者指向相反的半空间(意味着v0在“右侧”)。

由于N垂直于三角形的平面,因此如果vN之间的角度小于90度,则向量v指向相同的半空间;否则,向量v指向相同的半空间。 换句话说,如果vN的点积为正。

这些共同为您提供所需的订购标准。

求向量v2-v3和v1-v2的叉积。 从产品的方向推导方向。

向量是从平面向上指向还是向下指向。

这是如果我正确理解了您对左右的定义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM