我有一行,startPoint
p1(x,y)和endPoint
p2(x,y)。我想绘制一个弧,其startPoint
为p2,为endPoint
p3(x,y)。弧是其中一部分的圆的半径是已知的。我想要实现的目标:
在上图中,忽略了这些字母。我从谷歌图片中拍摄了这张图片。
如何绘制知道radius
r,startPoint
(L行的终点)和endPoint
,tangent
到L行的弧?
编辑:
我知道如何绘制圆弧,我只是不知道如何绘制与该线的端点相切的圆弧。
更新: 我找到了另一个完美的示例图片:
这张照片来自w3schools,我正在尝试实现几乎相同的东西。 w3schools url
答案 0 :(得分:1)
你有点P1,P2,P3和矢量
D = P2 - P1 //(x2-x1, y2-y1)
获取单位矢量
uD = D / Length(D)
和垂直单位矢量
uP = (-uD.y, uD.x)
检查所需的垂直方向
dp = uP.dot.(x3-x1, y3-y1)
如果dp为负,则取消uP向量以提供圆心的正确位置
然后找到圆心
C = P2 + uP * Radius
如果您需要开始和结束角度以形成弧线,请使用atan2(ArcTan2)函数计算它们
P2C = P2 - C //really -uP*radius
A2 = atan2(P2C.y, P2C.x)
P3C = P3 - C
A3 = atan2(P3C.y, P3C.x)