javascript - Bir doğruyun orta noktasına dik noktanın 3D koordinatları nasıl bulunur
(Javascript/Typescript ve Three.js kullanıyorum)
İki vektör arasında, diyelim ki {x:1, y:3, z:5} ve {x:7, y:8, z:10} arasında doğru bir çizgi var.
O çizginin orta noktasında, o çizgiye dik olacak şekilde bir disk (örneğin yarıçapı 1 olan) hayal edin.
O hayali diskin çevresinde bir noktayi nasıl bulabilirim?
Sonsuz nokta olduğunu biliyorum ama ben sadece diskin çevresinde, çizginin orta noktasına dik bir bağlantısı olan 1 (herhangi bir) noktayı hesaplamak istiyorum.
Cevap #1
Bunu yapmanın birçok yolu vardır. Az matematik gerektiren ve ağır işleri Three.js'in halletmesini sağlayan basit bir yol, bir Object3D'yi başka birinin içine yerleştirmektir: alt nesne 'halka'dır ve üst nesne halka'yı orta noktaya taşır ve hattın aşağısına bakarak dik hale gelmesini sağlar.
// Create end vectors
var v1 = new THREE.Vector3(1, 3, 5);
var v2 = new THREE.Vector3(7, 8, 10);
// Get midpoint
var mid = new THREE.Vector3();
mid.addVectors(v1, v2);
mid.multiplyScalar(0.5);
// Nest child object inside parent
var parent = new THREE.Object3D();
var child = new THREE.Object3D();
parent.add(child);
// Set child position to any point in the XY plane with radius = 1
// This is a point in your "disc"
child.position.set(0, 1, 0);
// Move parent to midpoint
parent.position.copy(mid);
// Rotate parent to look towards end of the line
// This makes the "disc" perpendicular to the line
parent.lookAt(v1);
// Get world position of child
var discPoint = new THREE.Vector3();
child.getWorldPosition(discPoint);
console.log(discPoint);
child öğesinin yerel pozisyonu hâlâ [0, 1, 0] olarak kalır, fakat ebeveyni taşıyıp döndürdükten sonra dünya pozisyonu, aradığınız cevaptır. Alternatif olarak, sadece Object3D.localToWorld kullanabilirsiniz, ama bu ebeveyn/çocuk örneğinin süreci daha net göstereceğini düşündüm.
