如何计算给定角度和不同边长的 X 和 Y 坐标

问题描述 投票:0回答:1

我正在构建一个 Google Maps Javascript API 应用程序,允许用户绘制多条折线的路径,计算角度,然后尝试弯曲角度,模拟车辆转弯半径。为此,我需要曲线开始和停止的点。问题是这些角度可以在地图上的任何方向,我正在努力寻找合适的方法来计算这些点的(X,Y)坐标......我可以计算大小,但由于不同的方向,我不确定如何将它恢复到一组笛卡尔坐标。这是几何的轮廓:

最终,我有了A、B、C点,角度a,和圆的半径。鉴于此,我如何根据笛卡尔坐标计算点 P1、P2 和(未标记)贝塞尔曲线的绿色参考点?这些点不必具体,只是在一般区域引导曲线。

google-maps geometry trigonometry computational-geometry geofencing
1个回答
0
投票

制作向量

BA

BA.x = A.x-B.x
BA.y = A.y-B.y etc

制作单位向量

len(BA) = sqrt(BA.x*BA.x+BA.y*BA.y)
uBA = BA / len(BA)       (uBA.x = BA.x/len(BA) etc)
uBC = BC / len(BC)

获取向量夹角的余弦

cs = cos(fullangle) = dot(uBA, uBC) = uBA.x*uBC.x + uBA.y*ubC.y

获取半角的切线

tn = sqrt((1-cs)/(1+cs))

计算点以提供从平分线到线的正常距离

R

P1 = B + uBA * R / tn   (P1.x = B.x + uBA.x * R / tn   etc)
P2 = B + uBC * R / tn

注意贝塞尔曲线和直线的平滑共轭需要控制点在直线上,所以

C1 = P1 - uBA * R * coeff
C2 = P2 - uBC * R * coeff

系数应适应“智能曲线”外观,可能在 0.3..1. 范围内

coeff=0.552 

对于直角线给出几乎完美的圆弧。

一般

coeff = 4/3*tg(angle/4) 

是很好的近似值

© www.soinside.com 2019 - 2024. All rights reserved.