gpt4 book ai didi

javascript - 通过两点计算水平线与直线的夹 Angular

转载 作者:搜寻专家 更新时间:2023-11-01 05:02:26 25 4
gpt4 key购买 nike

一个 JavaScript 问题。

下面是一个例程,似乎有一些问题。问题是什么?给定两个点的函数应该返回水平轴与包含两点 (X1,Y1) 和 (X2,Y2) 的线之间形成的 Angular (以弧度为单位)。

function GetAngle(X1, Y1, X2, Y2) {
if (Y2 == Y1) {
return (X1 > X2) ? Math.PI : 0;
}
if (X2 == X1) {
return (Y2 > Y1) ? Math.PI/2 : 1.5*Math.PI;
}
var tangent = (X2 - X1) / (Y2 - Y1);
var ang = Math.atan(tangent);
if (Y2-Y1 < 0) ang -= Math.PI;
return ang;
}

最佳答案

为什么不用Math.atan2,这样更方便。当两个数字都是负数(除法会丢失信息)时,它会自动正确处理,并为边缘情况返回正确的值。

var angle = Math.atan2(Y2 - Y1, X2 - X1);


// these return differently, even though 0 / -1 === 0 / 1
Math.atan2( 0, -1); // Math.PI
Math.atan2( 0, 1); // 0

// same thing: 1 / 1 === -1 / -1
Math.atan2( 1, 1); // Math.PI / 4
Math.atan2(-1, -1); // -Math.PI * 3 / 4


// other values
Math.atan2( 1, 1); // Math.PI / 4
Math.atan2( 1, 0); // Math.PI / 2
Math.atan2(-1, 0); // -Math.PI / 2

关于javascript - 通过两点计算水平线与直线的夹 Angular ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7235839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com