gpt4 book ai didi

javascript - 图 x,y 受力 Angular 后的点?

转载 作者:行者123 更新时间:2023-11-28 08:59:56 26 4
gpt4 key购买 nike

我有一个顶点系统,并用线连接它们。我通过比较每个顶点和它的“下一个”点来测量每个顶点的 Angular (顶点是一个双向链表)。

var next = this.get("next"),
dX = next.get("x") - this.get("x"),
dY = next.get("y") - this.get("y"),
radians = Math.atan2(dY, dX);

当它们之间的 Angular 达到某个阈值时,例如 45 度的 +/- 2 度...就像 47 度,我们想将其称为 45...我需要将此点移动到 x,y如果是 45 度,则应指定该 Angular 。同样的情况也适用于 135、90、180 等。

我可以很容易地检测到 Angular 以及我们是否处于捕捉到 45 度的区域内,并且我知道我们应该将其设置为哪个 Angular 。我不知道如何找到给定新 Angular x,y。

if(CLOSE_ENOUGH_TO_SNAP) {
newAngle = Math.round(angle / 45) * 45;

this.set({
x: something,
y: something
});
}

因此,在下图中,这个 Angular 应该捕捉到 90 度,因此我应该能够计算出新的 x,y,因为它是 90 度,而不是 92 度。

enter image description here

最佳答案

在伪代码中:

point dif = currentPt - previousPt

float distance = sqrt(dif.x * dif.x + dif.y * dif.y)

float newCurrentX = previousPt.x + distance * cos(newAngle)

floar newCurrentY = previousPt.y + distance * sin(newAngle)

但是,如果所有新 Angular 都是 45 的倍数,则可以避免使用 sin 和 cos。

对于 90 度(或零度)的倍数,

if (newAngle is 90) newCurrentY = previousPt.y + distance 
else if (newAngle is 0) newCurentX = previousPt.x + distance,
etc.

对于 45 度的倍数:

else if (newAngle is 135) { 
shift = distance * CONST_SIN_OF_45;
newCurrentX = previousPt.x - shift;
newCurrentY = previousPt.y + shift;
}

关于javascript - 图 x,y 受力 Angular 后的点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17889553/

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