Javascript 基于矢量的平面定向
我想画一个平面,上面有一个点阵列(包括原点)。three.js库在原点上绘制面向xy平面的平面。现在,我很难将它从原点移动到包含点的位置 到目前为止,我已经找到了一种方法来确定位于y轴上的一些平面的方向:Javascript 基于矢量的平面定向,javascript,math,graphics,three.js,linear-algebra,Javascript,Math,Graphics,Three.js,Linear Algebra,我想画一个平面,上面有一个点阵列(包括原点)。three.js库在原点上绘制面向xy平面的平面。现在,我很难将它从原点移动到包含点的位置 到目前为止,我已经找到了一种方法来确定位于y轴上的一些平面的方向: var directionalVectors = __getDirectionVectors(points); var normal = __getNormalOfPlane(directionalVectors); var angleXY = __getAngl
var directionalVectors = __getDirectionVectors(points);
var normal = __getNormalOfPlane(directionalVectors);
var angleXY = __getAngleBetweenPlanes( normal, new THREE.Vector3(0, 0, 1) );
plane.rotateY(- angleXY );
plane.translateY( planeDimensions.width /2.0);
plane.translateX( planeDimensions.height /2.0);
这是我计算方向向量的方法:
var __getDirectionVectors = function( points ){
var numOfPoints = points.length, i;
var pointOne, pointTwo, directionalVectors = [], directionalVector;
for( i = 0; i < numOfPoints - 1; i++){
pointOne = points[i];
pointTwo = points[i + 1];
directionalVector = new THREE.Vector3().subVectors(pointOne, pointTwo);
directionalVectors.push(directionalVector);
}
return directionalVectors;
};
这是我如何计算平面和XY平面之间的角度:
//http://www.netcomuk.co.uk/~jenolive/vect14.html
var __getAngleBetweenPlanes = function( normalOne, normalTwo){
var dotPdt = normalOne.dot(normalTwo);
var angle = Math.acos( dotPdt / ( normalOne.length() * normalTwo.length() ) );
return angle;
}
有什么方法可以使飞机适合所有类型的飞机 更具体地说,平面之间的角度与此有什么关系?当标题暗示你只想要一架飞机时,为什么还要多架飞机。。。希望原点是一个点,因为你们只写向量,它们都是相对的。。。当你已经得到法向量时,方向是什么意思?@Spektre由Three.js库绘制的平面总是在原点绘制。所以我计算我要画的平面和xy平面,xz平面和yz平面之间的角度。这样我就可以平移,旋转由Three.js绘制的平面到正确的方向position@Spektre每次调用draw plane函数时,我只想绘制一个平面。我只是想确保该函数适用于所有类型的平面。原点是,其他向量都是位于我要绘制的平面上的点。@Spektre我已经有了法向量,但我需要帮助将平面从原点移动到一个你希望有法向量的平面的位置。three.js库只是在xy平面的原点绘制平面。感谢您的帮助尝试(1)计算法线(2)
平面。查看(法线)
(3)平面。位置。设置(newPos)
,其中newPos
是点的平均值,包括原点。
//http://www.netcomuk.co.uk/~jenolive/vect14.html
var __getAngleBetweenPlanes = function( normalOne, normalTwo){
var dotPdt = normalOne.dot(normalTwo);
var angle = Math.acos( dotPdt / ( normalOne.length() * normalTwo.length() ) );
return angle;
}