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