我有关于我想绘制的路径的信息。信息由一系列直线部分和曲线组成。对于直段,我只有长度。对于曲线,我有半径,方向和角度。基本上,我有一只乌龟可以直接移动或从当前位置以圆弧移动(此后直线移动将朝不同的方向移动)。
我想用某种方法在以下条件下绘制这些路径:
据我所知,GDI +给了我2号,Cairo给了我1号,但是没有人能让两者变得特别容易。我愿意接受如何使GDI +或Cairo(最好是pycairo)工作的建议,并且我也对任何其他库(最好是C#或Python)开放。
我甚至愿意抽象地解释如何将其转化为代码。
答案 0 :(得分:2)
对于2D动作,状态为[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;
}