Javascript 围绕点创建一个三角形,垂直于法线

Javascript 围绕点创建一个三角形,垂直于法线,javascript,math,trigonometry,Javascript,Math,Trigonometry,我想得到一个三角形的点,在这个点上,面将指向指定法线的方向。我将使用THREE.js将它们添加到BufferGeometry 非常粗糙的图纸: 以下是我目前掌握的代码: //The XYZ location of a point: var x = model.points[i*3]; var y = model.points[i*3+1]; var z = model.points[i*3+2]; //The normal vector direction: var nx = model.n

我想得到一个三角形的点,在这个点上,面将指向指定法线的方向。我将使用THREE.js将它们添加到BufferGeometry

非常粗糙的图纸:

以下是我目前掌握的代码:

//The XYZ location of a point:
var x = model.points[i*3];
var y = model.points[i*3+1];
var z = model.points[i*3+2];


//The normal vector direction:
var nx = model.normals[i*3];
var ny = model.normals[i*3+1];
var nz = model.normals[i*3+2];
如何在此点周围再拾取3个点,这些点都与法线垂直,并且彼此之间的距离相同


谢谢

1取法线与任意非平行向量的叉积。这将得到一个垂直于法向量的向量

1.5将垂直向量规格化并缩放至所需大小。该向量的长度将是从三角形质心到其每个顶点的距离

2绕法向量旋转垂直向量2PI/3和4PI/3


3将3个向量添加到中心点。

请注意,符合您标准的三角形有无限多个,即使我们仅限于等边三角形。这是因为有一个通过给定点x,y,z垂直于给定向量的整个平面。看看如何推导该平面的方程。从那里,您需要在平面上拾取一个点。然后你可以通过在x,y,围绕给定点旋转来计算另外两个点,z.

您需要找到平行于法线且包含该点的平面只有一个,然后在此平面中选择具有指定距离的任何点,并围绕中心点旋转两次120度。

澄清:图片中的v3是否应该指向页面外?如果是,此处没有足够的约束来确定此类三角形的三个顶点的唯一值。有无限多的选择。是的,我明白你的意思,但不管三角形是什么角度。这就是我感到困惑的原因。@Code Pe徒弟-是的。@AmrBerag从技术上讲,直线也不能是垂直的,因为垂直度是两个对象之间的关系。我认为这个想法是,包含三角形的平面垂直于法向量。任意向量可以是任何东西吗?@JonathanPlackett是的,这就是任意的意思。注意,它必须不平行于法向量,否则叉积将是零向量。我有这个工作,但是因为我选择了一个任意的点,我最终得到的三角形大小不同。有没有办法使它们保持一致?当然,在步骤1.5中对向量进行规格化和缩放。