首页 文章

绘制以直线结尾的弧的公式,Y作为X的函数,起始斜率,结束斜率,起点和圆弧半径?

提问于
浏览
0

我正在寻找一个数学公式,在绘制Y作为X的函数的图形上,在指定的起始点(X的值,甚至更好的X和Y坐标)之前将具有一定的斜率,然后在它之后将绘制一个指定半径的弧,当它到达第二个指定的斜率时将结束,并且从该点开始将是该第二个斜率的另一条直线 .

我知道因为它是Y作为X的函数,所以斜率参数需要大于-90且小于90度;我并不担心在这些极端情况下(或超出)的任何不当行为 .


实际上,我会更喜欢一个采用起点和终点(2d坐标),开始和结束斜率的公式;并且它们之间会有两个弧线(需要时在它们之间有一条直线),无缝连接两条直线(显然终点的X需要比起点的X大;我不在乎是什么当不是这种情况时发生) . 但我想这个公式可能比我先问的要难得多 .


ps:“arc”是指圆圈的一部分;如图所示,如果图形的两个轴具有相同的比例,则弧对于相同半径的圆具有正确的纵横比 .

1 回答

  • 0

    好吧,我看到这样:

    arc-curve

    • compute P0

    作为行的交集 A + t*dAB - t*dB

    • compute P1 (center of circle)

    它是由半径 r 垂直的平移线 A->P0B->P0 的交点 . 有两种可能性,所以选择正确的一种(这导致圆形部分的角度较小) .

    circle center

    • compute P2,P3

    只是 A-P0B-P0 行之间的交叉点和从 P1 到它的垂直线

    • the curve
    // some constants first
    da=P2-A;
    db=B-P3;
    a2=atan2(P2.x-P1.x,P2.y-P1.y);
    a3=atan2(P3.x-P1.x,P3.y-P1.y);
    if (a2>a3) a3-=M_PI*2.0;
    dang=a3-a2;
    
    // now (x,y)=curve(t) ... where t = <0,3>
    if (t<=1.0)
     {
     x=A.x+t*da.x;
     y=A.y+t*da.y;
     }
    else if (t<=2.0)
     {
     t=a2+((t-1.0)*dang);
     x=P1.x+r*cos(t);
     y=P1.y+r*sin(t);
     }
    else
     {
     t=t-2.0;
     x=P3.x+t*db.x;
     y=P3.y+t*db.y;
     }
    

相关问题