Javascript 图x、y强制角度后的点?

Javascript 图x、y强制角度后的点?,javascript,canvas,geometry,trigonometry,vertices,Javascript,Canvas,Geometry,Trigonometry,Vertices,我有一个顶点系统,它们之间有直线连接。我通过比较每个顶点和它的“下一个”点(顶点是一个双链接列表)来测量每个顶点的角度 当它们之间的角度达到某个阈值时,比如从45度到+/-2度。。。比如47度,我们称之为45度。。。我需要把这一点移到x,y,如果它是45度的话。这同样适用于135、90、180等等 我可以很容易地检测到角度,以及我们是否在捕捉到45区域内,并且我知道应该将其设置为哪个角度。我不知道如何找到的是给定新角度的x,y if(CLOSE_ENOUGH_TO_SNAP) { new

我有一个顶点系统,它们之间有直线连接。我通过比较每个顶点和它的“下一个”点(顶点是一个双链接列表)来测量每个顶点的角度

当它们之间的角度达到某个阈值时,比如从45度到+/-2度。。。比如47度,我们称之为45度。。。我需要把这一点移到x,y,如果它是45度的话。这同样适用于135、90、180等等

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

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

    this.set({
       x: something,
       y: something
    });
}
在下图中,这个角度应该是90,所以我应该能够计算出一个新的x,y,假设它是90,而不是92

在psuedocode中:

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)
但是,如果所有新角度都是45的倍数,则可以避免使用正弦角和余弦角

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

对于45度的倍数:

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

现在应该在上面了-抱歉,忘了连接。可能有助于指定如果这个角度是三角形上的C,我知道a和B的点以及腿AB的长度,但我不知道AC和BC的长度。:(抱歉,我仍然看不到图像:(我需要遵循一些链接吗?不。我把它直接附加到消息上。可能是缓存问题?如果我不知道段的距离/长度,这可能吗?你有两个坐标,对吗?如果是,那么可以使用毕达哥拉斯定理计算距离。这就是第二条带平方根的线的作用。
if (newAngle is 90) newCurrentY = previousPt.y + distance 
else if (newAngle is 0) newCurentX = previousPt.x + distance,
 etc.
else if (newAngle is 135) { 
 shift = distance * CONST_SIN_OF_45; 
 newCurrentX = previousPt.x - shift; 
 newCurrentY = previousPt.y + shift; 
}