【问题标题】:create points parallel to triangle corners创建与三角形角平行的点
【发布时间】:2020-02-01 06:18:52
【问题描述】:

假设我有这个三角形(深蓝色)并且我知道它是顶点(红色): (1,3,0) (0,4,0) (-1,3,0)

现在我想在它们的顶点上方创建新点(黄色),但平行于三角形。在这种情况下,这很简单:只需添加 y 值即可。

但是如果三角形不是直的呢?例如: (1,3,0) (0,4,1) (-1,3,0)

我得到了它的 n-Vector(绿线),我想我必须用它来创建这些平行点,但我不知道如何......我正在寻找一种方法来以编程方式对多个三角形执行此操作以各种方式定位。有什么想法吗?

@Ben Whitmore

var v1 = new THREE.Vector3(0,4,1);
var v2 = new THREE.Vector3(1,3,0);
var v3 = new THREE.Vector3(-1,3,0);

var c = new THREE.Vector3( );
c.crossVectors( v2, v3 ) // { x: 0, y: -0, z: 6 }
c.normalize() // { x: 0, y: -0, z: 1 }

sphere.position.set( ??? );`

【问题讨论】:

    标签: math three.js geometry


    【解决方案1】:

    要实现这一点,您需要找到一个垂直于三角形平面的方向向量。这可以很容易地从三角形两条边的cross product 推导出来,然后将结果归一化为unit vector

    当然,向量可以采用两个方向,即垂直于平面:它可以指向平面“上方”或“下方”。你得到哪个方向将取决于三角形边缘向量的顺时针/逆时针方向。如果不是您想要的方向,只需将其反转即可。

    【讨论】:

    • 谢谢,但我现在应该在什么位置设置球体? (我这里无法添加格式化代码,所以我编辑了我的帖子,请看)
    • 您需要从边向量中获取叉积,而不是顶点的绝对位置: c.crossVectors( v2 - v1, v3 - v2 ) 然后在归一化(大概是缩放)之后,将结果添加到 v1 上以获得从 v1 的点偏移;添加到 v2 以获得从 v2 的点偏移;等等。我认为你的“球体”是黄点之一。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 2020-01-10
    • 1970-01-01
    相关资源
    最近更新 更多