【发布时间】:2017-10-31 03:35:36
【问题描述】:
我的 Java awt 开发被一些数学困住了。
我需要将 SVG 的 Path 命令放入 awt 的路径中。一切正常,但后来我遇到了 ArcTo 命令,我仍然无法正确操作。
AWT 的 ArcTo 命令需要包含 Arc 的 Rectangle 的 x 和 y 坐标、宽度和高度、angleStart、弧的角度范围以及弧结束的类型(无关)。
new Arc2D.Double(x, y, w, h, start, extent, type);
SVG 的 ArcTo 命令仅此而已。 Svg 给出圆弧的 X 和 Y 半径、一个旋转、两个布尔值(标志)和一个目标点。这两个标志用于在其他参数留下的四种弧的可能性之间进行选择。 This link shows nicely how it's done.
A rx ry x-axis-rotation large-arc-flag sweep-flag x y
JavaFX 的 ArcTo 命令几乎没有这样的作用,
new ArcTo(radiusX, radiusY, xAxisRotation, arcExtent, arcY, largeArcFlag, sweepFlag);
我的数学还不够好,无法在这两个构造函数之间进行这种转换。我会继续我的研究,但我现在真的迷路了,我真的需要你的帮助!
【问题讨论】:
-
Here 是 OpenJFX 源代码。
private addArcTo方法正是执行该计算。 -
SVG arcs 可以旋转 GDI 样式(就像你的 Arc2D)不能。如果您可以在 gfx 上应用矩阵,那么您可以将 SVG 弧转换为轴对齐的椭圆弧 + 将其转换为所需弧的变换矩阵......不容易做到......但仍然可行(将纵横比从椭圆转换为圆计算并转换回椭圆有很大帮助......顺便说一句,在 SVG 文档中有 SVG 弧的方程。如果转换矩阵不是一个选项,您需要将弧转换为折线,但会丢失信息......请参阅Converting an svg arc to lines跨度>
-
@ccprog 非常感谢,这项工作就像一个魅力。需要进行一些小的调整,但结果是完美的。对我来说数学太多了。