Language agnostic 如何绘制根据直线和曲线运动指定的路径

Language agnostic 如何绘制根据直线和曲线运动指定的路径,language-agnostic,math,graphics,drawing,Language Agnostic,Math,Graphics,Drawing,我有我想画的路径的信息。该信息由一系列直线段和曲线组成。对于直线段,我只有长度。对于曲线,我有半径、方向和角度。基本上,我有一只乌龟,它可以从当前位置直线移动或以圆弧移动(之后直线移动将以不同的方向移动) 我想通过以下条件绘制这些路径: 最小(最好没有)三角学 能够在画布上居中并缩放以适应任意大小 据我所知,GDI+给了我第2名,Cairo给了我第1名,但两者都不是特别容易得到的。我愿意听取关于如何使GDI+或Cairo(最好是pycairo)工作的建议,我也愿意接受任何其他库(最好是C#或Py

我有我想画的路径的信息。该信息由一系列直线段和曲线组成。对于直线段,我只有长度。对于曲线,我有半径、方向和角度。基本上,我有一只乌龟,它可以从当前位置直线移动或以圆弧移动(之后直线移动将以不同的方向移动)

我想通过以下条件绘制这些路径:

  • 最小(最好没有)三角学
  • 能够在画布上居中并缩放以适应任意大小
  • 据我所知,GDI+给了我第2名,Cairo给了我第1名,但两者都不是特别容易得到的。我愿意听取关于如何使GDI+或Cairo(最好是pycairo)工作的建议,我也愿意接受任何其他库(最好是C#或Python)


    我甚至愿意接受抽象的数学解释,即如何将其转换为代码。

    对于二维运动,状态是
    [x,y,a]
    。其中角度
    a
    相对于正x轴。假设初始状态为
    [0,0,0]
    。根据每种运动类型,需要2个例程来更新状态。每个路径都会产生一个新的状态,因此可以使用坐标来相应地配置画布。例程应该类似于:

    //by the definition of the state
    State followLine(State s, double d) {
        State s = new State();
        s.x = s0.x + d * cos(s0.a);
        s.y = s0.y + d * sin(s0.a);
        s.a = s0.a;
        return s;
    }
    
    State followCircle(State s0, double radius, double arcAngle, boolean clockwise) {
        State s1 = new State(s0);
        //look at the end point on the arc
        if(clockwise) {
            s1.a = s0.a - arcAngle / 2;
        } else {
            s1.a = s0.a + arcAngle / 2;
        }
        //move to the end point of the arc
        State s = followLine(s1, 2 * radius * sin(arcAngle/ 2));
        //fix new angle
        if(clockwise) {
            s.a = s0.a - arcAngle;
        } else {
            s.a = s0.a + arcAngle;
        }
        return s;
    }
    

    这绝对是有帮助的。我现在只需要弄清楚,如何在跟随一个圆圈之前和之后获取状态,并将其转换为一些图形库的参数。