【问题标题】:Calculating the perpendicular plane to a triangle in 3D space计算 3D 空间中三角形的垂直平面
【发布时间】:2011-01-25 18:21:34
【问题描述】:

我在 3D 空间中有一个三角形,由它的 3 个顶点 p0、p1 和 p2 定义。

我希望在这个 3D 空间中计算一个平面,它位于 p0 和 p1 上并面向第三点 p2。

这个平面由一个位置和归一化方向定义/

除了沿着 p0 和 p1 并面向 p2 之外,该平面还应该垂直于由 p0、p1 和 p2 创建的平面

我已经为此苦苦挣扎了很长一段时间,非常感谢任何人提供的任何帮助。

【问题讨论】:

    标签: vector 3d polygon


    【解决方案1】:

    除非我误解了您的要求,否则从线到 p2 的向量将是您尝试定义的平面的法线。基本上,你构造一条与线 p0-p1 成直角的线,穿过 p2。

    【讨论】:

      【解决方案2】:

      你的问题不恰当。对于位于 p0 和 p1 上的任何平面,在该平面上都会有某个点“面向”点 p2。所以剩下要计算的是沿着 p0 和 p1 的某个平面。

      normal = normalize(cross(p1-p0, pX-p0))  //pX is anything except p1
      planePoint = p0
      

      编辑:见 cmets

      这是我的评论解释的一个例子

      八度:14> p0
      p0 =

      0 0 0

      八度:15> p1
      p1 =

      0 0 5

      八度:16> p2
      p2 =

      5 0 0

      八度:17> 交叉(p1-p0,交叉(p1-p0,p2-p0))
      回答 =

      -125 0 0

      您会注意到符号是错误的,请使用叉积中的参数顺序以使其朝向正确的方向。也不要忘记标准化......但它不会影响方向。还要检查以确保每个叉积后的范数不接近 0,否则没有唯一答案..(三角形形成一条线)

      【讨论】:

      • 啊,是的,我应该澄清一下。我很抱歉。除了沿着 p0 和 p1 并面向 p2 之外,该平面还应该垂直于由 p0、p1 和 p2 创建的平面。
      • 然后 normal = normalize(cross(p1-p0, normalize(cross(p1-p0,p2-p0)))) 并且planePoint仍然是p0。
      • 效果很好,感谢您的帮助。现在你已经为我拼写出来了,这似乎几乎是显而易见的了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      • 1970-01-01
      • 2011-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多