我有两个平面,如何计算它们之间的角度?在平面情况下,也可以计算出两个Object3D点之间的角度吗?
这里有一个小提琴示例:https://jsfiddle.net/rsu842v8/1/
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 1000);
camera.position.set(25, 25, 12);
var material = new THREE.MeshBasicMaterial({
color: 0x00fff0,
side: THREE.DoubleSide
});
window.plane1 = new THREE.Mesh(new THREE.PlaneGeometry(10, 10), material);
scene.add(plane1);
plane1.position.set(0.3, 1, -2);
plane1.rotation.set(Math.PI / 3, Math.PI / 2, 1);
window.plane2 = new THREE.Mesh(new THREE.PlaneGeometry(10, 10), new THREE.MeshBasicMaterial({
color: 0x0fff00,
side: THREE.DoubleSide
}));
scene.add(plane2);
// setup rest
var pointLight = new THREE.PointLight(0xFFFFFF);
pointLight.position.x = 10;
pointLight.position.y = 50;
pointLight.position.z = 130;
scene.add(pointLight)
const renderer = new THREE.WebGLRenderer({
antialias: true
});
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setClearColor(0x20252f);
renderer.setPixelRatio(window.devicePixelRatio);
document.body.appendChild(renderer.domElement);
const controls = new THREE.OrbitControls(camera, renderer.domElement);
animate();
// TODO: What is the angle between plane1 and plane2?
function animate() {
requestAnimationFrame(animate);
render();
}
function render() {
renderer.render(scene, camera);
}<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r82/three.js"></script>
<script src="https://yume.human-interactive.org/examples/buffer-geometry/OrbitControls.js"></script>
发布于 2017-07-25 16:34:05
你想要找到两个three.js平面网格之间的角度。
未旋转的THREE.PlaneGeometry是面向正z轴的.平面的正z轴方向的法线点。
因此,创建一个( 0,0,1)向量,并将同样的旋转应用于平面网格。
请注意,当您设置plane.quaternion时,plane.rotation会自动更新,因此您可以在计算中使用四元数--如下所示:
var vec1 = new THREE.Vector3( 0, 0, 1 ); // create once and reuse
var vec2 = new THREE.Vector3( 0, 0, 1 );
vec1.applyQuaternion( plane1.quaternion );
vec2.applyQuaternion( plane2.quaternion );
var angle = vec1.angleTo( vec2 ); // radians如果飞机是其他旋转物体的子类,那么问题就会复杂一些。
当然,您可以使用angleTo()来找到任意两个向量之间的角度。
three.js r.86号
发布于 2017-07-25 15:05:05
我建议以某种方式计算你渲染的每一个平面的法向量。一旦有了这两个向量,比如说n1和n2,就很容易计算平面和点积之间的角度。
如果您不熟悉点积,dot(n1,n2)中n1 = (x1,y1,z1)和n2 = (x2,y2,z2)将等于x1*x2 + y1*y2 + z1*z2。还有一个简单的恒等式表示dot(n1,n2) = |v1||v2|cos(a),其中||表示向量的大小,即|v| = sqrt(x*x + y*y + z*z) if v = (x,y,z),a表示法线之间的角度,即平面间的角度。下面是一个指向数学堆栈交换答案的链接。
简而言之,a = arccos(dot(n1,n2) / |n1||n2|)。
如果您有兴趣了解更多关于平面的定义以及法线向量所代表的内容,请尝试查看这。
如果您知道n1和n2是单位向量,那么方程就进一步简化为a = arccos(dot(n1,n2))。
https://stackoverflow.com/questions/45306101
复制相似问题