移动起点后找到绘制圆弧的公式

Posted

技术标签:

【中文标题】移动起点后找到绘制圆弧的公式【英文标题】:Finding a formula for drawing an Arc after moving the starting point 【发布时间】:2015-10-11 16:35:49 【问题描述】:

我正在尝试编写一个公式来计算绘制圆弧时的新角度。如果我用图片解释一下可能会更好。

以上是我在谷歌地球上绘制的图片。

目前我有一个函数可以在给定 (x,y) 轴心点、方位角和半径距离的情况下绘制弧线

在绘图上绘制此弧(这是距原点最远的弧)后,我需要移动原点,例如。如果方位角为 170 度,则左侧线将从 170-90 开始,右侧线将从 170+90 开始

我无法找出较小同心圆中角度(或方位角)的公式。我要提前感谢任何人提供的任何帮助。

这是我计算和绘制弧线的公式

def drawArc(lat1,lon1,lbearing,rbearing,hr): #draw Arc given lat/lon piviot point with the right and left bearing to draw the path and distance
    arcstr=""
    if rbearing < lbearing: #if the left bearing is already bigger than the right bearing, switch places. Test Case not proven yet! with winds coming from the east
        lbearing,rbearing = rbearing,lbearing
    while lbearing < rbearing:
        arc1,arc2 = getEndpoint(lat1,lon1,lbearing,hr) #arc1 and arc2 are lat and lon respectively 
        arcCoord = "%f,%f,0\n"%(arc2,arc1)
        arcstr+=arcCoord
        lbearing+=1 #count
    #attach the last remaining point which is the end point at the right bearing
    arc1,arc2 = getEndpoint(lat1,lon1,rbearing,hr) #arc1 and arc2 are lat and lon respectively 
    arcCoord = "%f,%f,0\n"%(arc2,arc1)
    arcstr+=arcCoord
    return arcstr

要绘制三个弧,这里是调用函​​数的地方:

arc3=drawArc(latitude,longitude,leBearing,reBearing,arc3hr)
arc2=drawArc(latitude,longitude,leBearing-(SOME FORMULA TO GIVE ME THE EXTRA ANGLE/BEARING TO INTERSECT WITH THE OUTER LINE),reBearing+(SAME FORMULA HERE),arc2hr) 
arc1=drawArc(latitude,longitude,leBearing-(SOME FORMULA TO GIVE ME THE EXTRA ANGLE/BEARING TO INTERSECT WITH THE OUTER LINE),reBearing+(SAME FORMULA HERE),arc1hr) 

这张图片上的已知点:

    以纬度/经度表示的原点

    每条线的距离和方位

    原点内圆半径10NM,外圆20NM

这是一张简化的图片,我相信角度 theta 就是我要找的

【问题讨论】:

我投票结束这个问题,因为它实际上不是一个编程问题 【参考方案1】:

这是必要的几何图形,假设我正确解释了您的描述和图片。下图(和 linked)显示了您的图片,其中包含我们需要求解 theta 的变量。

现在,数学。这利用了sines/cosines的规律。

余弦定律告诉我们:

所以我们必须求解 h、g 和 f,然后取结果的反余弦得到 theta。

根据正弦定律...

我们可以立即用余弦定律求解:

要找到线段 x_1 和 x_2 的长度,我们需要角度 theta_1,2,3...

使用这些角度和更多的正弦定律给我们 x_1 和 x_2...

把这一切放在一起,你就得到了

在用适当的值替换 后,只需取 即可,这取决于您选择的 d(或 DIST)。我就不在这里写了。

【讨论】:

以上是关于移动起点后找到绘制圆弧的公式的主要内容,如果未能解决你的问题,请参考以下文章

MFC 动态绘制直线,圆弧段(连续)如何实现

openlayers 根据起点和终点半径画圆弧

CAD参数绘制圆弧(网页版)

CAD参数绘制圆弧(com接口)

模拟PLC 的圆弧插补方式在VC中绘制圆弧

用svg path怎么绘制四分之一圆弧,各个参数请详细解释