使用 JavaScript 在 3D space 中查找 3 个点之间的角度
Find angle between 3 points in 3D space with JavaScript
我有 3 个点定义 3D 中的一个角度 space。
const start = [-73.52361290322581, -20, -41.69909677419352];
const middle = [-100.63483870967742, -20, -71.23096774193547];
const end = [-60.93625806451613, -20, -80.91354838709677];
我需要求出这 3 个点之间的夹角,也就是矢量起点-中间点和中间点-终点之间的夹角。
到目前为止,我只找到了 Python 个使用特定线性代数库进行计算的解决方案,但我正在寻找一些简单的 JavaScript。
我设法组合了一个函数来计算 2D 上的角度 space,但我需要在 3D 上使用它。
function radiansToDegrees(radians) {
var pi = Math.PI;
return radians * (180 / pi);
}
function getAngle(a, b, c) {
const ang = radiansToDegrees(
Math.atan2(c[1] - b[1], c[0] - b[0]) - Math.atan2(a[1] - b[1], a[0] - b[0])
);
return ang < 0 ? ang + 360 : ang;
}
你为什么不使用 the law of cosines?
const a = [-73.52361290322581, -20, -41.69909677419352];
const b = [-100.63483870967742, -20, -71.23096774193547];
const c = [-60.93625806451613, -20, -80.91354838709677];
// Function to convert radians to degrees
function radians_to_degrees(radians) {
return radians * (180 / Math.PI);
}
// Function to find the distance between 2 points in a 3D plane
function dist(p1, p2) {
return Math.sqrt(
Math.pow(p1[0] - p2[0], 2) +
Math.pow(p1[1] - p2[1], 2) +
Math.pow(p1[2] - p2[2], 2)
);
}
// Function to find the angle in 3D space
function find_angle(p1, p2, p3) {
const ab = dist(a, b);
const bc = dist(b, c);
const ac = dist(a, c);
const angle = (Math.pow(ab, 2) + Math.pow(bc, 2) - Math.pow(ac, 2)) /
(2 * ab * bc);
return radians_to_degrees(Math.acos(angle));
}
console.log(find_angle(a, b, c));
我有 3 个点定义 3D 中的一个角度 space。
const start = [-73.52361290322581, -20, -41.69909677419352];
const middle = [-100.63483870967742, -20, -71.23096774193547];
const end = [-60.93625806451613, -20, -80.91354838709677];
我需要求出这 3 个点之间的夹角,也就是矢量起点-中间点和中间点-终点之间的夹角。
到目前为止,我只找到了 Python 个使用特定线性代数库进行计算的解决方案,但我正在寻找一些简单的 JavaScript。
我设法组合了一个函数来计算 2D 上的角度 space,但我需要在 3D 上使用它。
function radiansToDegrees(radians) {
var pi = Math.PI;
return radians * (180 / pi);
}
function getAngle(a, b, c) {
const ang = radiansToDegrees(
Math.atan2(c[1] - b[1], c[0] - b[0]) - Math.atan2(a[1] - b[1], a[0] - b[0])
);
return ang < 0 ? ang + 360 : ang;
}
你为什么不使用 the law of cosines?
const a = [-73.52361290322581, -20, -41.69909677419352];
const b = [-100.63483870967742, -20, -71.23096774193547];
const c = [-60.93625806451613, -20, -80.91354838709677];
// Function to convert radians to degrees
function radians_to_degrees(radians) {
return radians * (180 / Math.PI);
}
// Function to find the distance between 2 points in a 3D plane
function dist(p1, p2) {
return Math.sqrt(
Math.pow(p1[0] - p2[0], 2) +
Math.pow(p1[1] - p2[1], 2) +
Math.pow(p1[2] - p2[2], 2)
);
}
// Function to find the angle in 3D space
function find_angle(p1, p2, p3) {
const ab = dist(a, b);
const bc = dist(b, c);
const ac = dist(a, c);
const angle = (Math.pow(ab, 2) + Math.pow(bc, 2) - Math.pow(ac, 2)) /
(2 * ab * bc);
return radians_to_degrees(Math.acos(angle));
}
console.log(find_angle(a, b, c));