You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ThreeJS中找到与直线AB垂直且指定距离的点C

如何在ThreeJS中找到与直线AB垂直的点C

首先要明确:和直线AB垂直的点C有无数个,我们需要先确定一个约束(比如从A点出发,生成一个固定长度的垂直向量来得到C),下面是具体实现步骤:

核心原理

两个向量垂直的判定条件是点积为0。假设向量AB = B - A,向量AC = C - A,只要满足AB · AC = 0,点C就与直线AB垂直。我们可以通过叉乘快速得到一个与AB垂直的向量,再基于这个向量生成点C。

ThreeJS实现步骤

1. 定义点A和点B

先创建两个THREE.Vector3对象表示世界坐标系中的点:

const pointA = new THREE.Vector3(1, 2, 3); // 替换为你的实际坐标
const pointB = new THREE.Vector3(4, 5, 6);

2. 计算向量AB

const vectorAB = pointB.clone().sub(pointA); // 得到从A指向B的向量

3. 生成与AB垂直的向量

我们需要找一个和AB不共线的参考向量,通过叉乘得到垂直向量:

// 优先用Y轴向上向量(0,1,0),如果AB和Y轴共线就切换到X轴
let referenceVec = new THREE.Vector3(0, 1, 0);
if (vectorAB.dot(referenceVec) === vectorAB.length()) {
  referenceVec = new THREE.Vector3(1, 0, 0);
}

// 叉乘得到同时垂直于AB和参考向量的新向量,再归一化
const perpendicularVec = new THREE.Vector3().crossVectors(vectorAB, referenceVec).normalize();
  • crossVectors(a,b)会返回一个垂直于a、b的向量
  • normalize()将向量长度调整为1,方便后续自定义距离

4. 生成点C

比如从点A出发,沿着垂直向量移动固定距离(比如5)得到C:

const distance = 5; // 自定义A到C的距离
const pointC = pointA.clone().add(perpendicularVec.multiplyScalar(distance));

验证垂直关系

可以通过点积验证AC和AB是否垂直:

const vectorAC = pointC.clone().sub(pointA);
const dotProduct = vectorAB.dot(vectorAC);
console.log(dotProduct); // 结果应接近0(浮点误差)

内容的提问来源于stack exchange,提问作者Jason Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 07:05:33