问题描述
在 Delphi 10.2.3 中使用 GDI+:我从矩形 RectF 绘制了一个椭圆(非圆形)弧,并使用 DrawArcF 定义了起始角和扫掠角。我需要能够根据点的度数找到沿弧中心线的任何点(无论笔宽如何) - 例如,如果弧从 210 开始 120 度,我需要找到点,比如说,284 度,相对于 RectF。
在这种情况下,无论大小如何,矩形的纵横比都保持不变,因此弧的形状也应保持一致,如果这有所不同。
关于如何解决这个问题有什么想法吗?
解决方法
以 cx,cy
为中心,半轴为 a,b
对角 Fi
的轴对齐椭圆的参数方程是:
t = ArcTan2(a * Sin(Fi),b * Cos(Fi))
x = cx + a * Cos(t)
y = cy + b * Sin(t)
(我使用 atan2
摆脱了 atan
范围限制/符号问题)
请注意,参数 t
运行在相同的范围 0..2*Pi
内,但与真实角度 Fi
不同(它们在角度 k*Pi/2
处重合)。Fi/t
from Mathworld 的 b/a=0.6
比率图片(公式 58 附近)