Language agnostic 如何绘制根据直线和曲线运动指定的路径
我有我想画的路径的信息。该信息由一系列直线段和曲线组成。对于直线段,我只有长度。对于曲线,我有半径、方向和角度。基本上,我有一只乌龟,它可以从当前位置直线移动或以圆弧移动(之后直线移动将以不同的方向移动) 我想通过以下条件绘制这些路径:Language agnostic 如何绘制根据直线和曲线运动指定的路径,language-agnostic,math,graphics,drawing,Language Agnostic,Math,Graphics,Drawing,我有我想画的路径的信息。该信息由一系列直线段和曲线组成。对于直线段,我只有长度。对于曲线,我有半径、方向和角度。基本上,我有一只乌龟,它可以从当前位置直线移动或以圆弧移动(之后直线移动将以不同的方向移动) 我想通过以下条件绘制这些路径: 最小(最好没有)三角学 能够在画布上居中并缩放以适应任意大小 据我所知,GDI+给了我第2名,Cairo给了我第1名,但两者都不是特别容易得到的。我愿意听取关于如何使GDI+或Cairo(最好是pycairo)工作的建议,我也愿意接受任何其他库(最好是C#或Py
我甚至愿意接受抽象的数学解释,即如何将其转换为代码。对于二维运动,状态是
[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;
}
这绝对是有帮助的。我现在只需要弄清楚,如何在跟随一个圆圈之前和之后获取状态,并将其转换为一些图形库的参数。