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

时间:2014-04-09 06:01:19

标签: math geometry formula

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

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


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


ps:by" arc"我指的是一个圆圈;如图所示,如果图形的两个轴具有相同的比例,则弧对于相同半径的圆将具有正确的纵横比。

1 个答案:

答案 0 :(得分:0)

嗯,我觉得这样:

arc-curve

  1. 计算P0

    作为行A + t*dAB - t*dB

  2. 的交集
  3. 计算P1(圆心)

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

    circle center

  4. 计算P2,P3

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

  5. 曲线

    // 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;
     }