将三次曲线转换为点
Converting Cubic curve to points
我有多个构成形状的三次曲线我想将此形状转换为多边形而不丢失曲线的曲率。我有一个起点,终点和每条曲线的两个控件。是否有任何算法或方法可以将这组曲线转换为多点多边形?
提前致谢
private List<CubicCurve> curves = new ArrayList<>();
每个红点代表一条曲线的终点和下一条曲线的起点
两个红点之间的两个绿点代表曲线的控制点
这个过程叫做"curve flattening"。
用参数方程计算曲线上的中间点,递归细分,直到它们形成的三角形的高度可以忽略不计。
对于上述寻找 Shape 轮廓的中间点的问题,我有一个更简单且可能也更有效的解决方案。它还使用 PathTransition,但使用的方式更直接。我只用 Circle 测试过它,但我认为它适用于任何 Shape。
public static void main(String[] args) {
Shape shape = new Circle(100);
PathTransition pt = new PathTransition(Duration.ONE, shape, new Circle());
long t0 = System.currentTimeMillis();
pt.playFromStart(); // force initialization
pt.stop();
for (double frac = 0.0; frac <= 1.0; frac += 0.05) {
pt.interpolate(frac);
System.out.println(pt.getNode().getTranslateX() + " " + pt.getNode().getTranslateY());
}
long t1 = System.currentTimeMillis();
System.out.println("Evaluation took: " + (t1 - t0) + "ms");
}
我有多个构成形状的三次曲线我想将此形状转换为多边形而不丢失曲线的曲率。我有一个起点,终点和每条曲线的两个控件。是否有任何算法或方法可以将这组曲线转换为多点多边形? 提前致谢
private List<CubicCurve> curves = new ArrayList<>();
每个红点代表一条曲线的终点和下一条曲线的起点 两个红点之间的两个绿点代表曲线的控制点
这个过程叫做"curve flattening"。
用参数方程计算曲线上的中间点,递归细分,直到它们形成的三角形的高度可以忽略不计。
对于上述寻找 Shape 轮廓的中间点的问题,我有一个更简单且可能也更有效的解决方案。它还使用 PathTransition,但使用的方式更直接。我只用 Circle 测试过它,但我认为它适用于任何 Shape。
public static void main(String[] args) {
Shape shape = new Circle(100);
PathTransition pt = new PathTransition(Duration.ONE, shape, new Circle());
long t0 = System.currentTimeMillis();
pt.playFromStart(); // force initialization
pt.stop();
for (double frac = 0.0; frac <= 1.0; frac += 0.05) {
pt.interpolate(frac);
System.out.println(pt.getNode().getTranslateX() + " " + pt.getNode().getTranslateY());
}
long t1 = System.currentTimeMillis();
System.out.println("Evaluation took: " + (t1 - t0) + "ms");
}