我在下面的函数中有这个公式。这是一个相当简单的概念,但是这个公式让我花了将近两周的时间才完美地实现。它的作用是计算在给定角度和距离中心点多远的位置放置对象。它对于手动绘制圆非常有用,我主要用它来绘制我的指针表组件。它计算出绘制指针的位置。
现在我正在尝试弄清楚如何修改此公式以考虑椭圆或椭圆形。我想到了先绘制一个圆形组件,然后在绘制完毕后进行拉伸的想法,但这不是一个干净的解决方案,因为我正在绘制的图形已经是椭圆形状。
我需要向这个函数添加一个参数,告诉它宽度/高度之间的比率,以便它知道如何偏移这个点。默认情况下,此参数应为1,表示宽度=高度,即没有椭圆形状的绘制或偏移。但是假设我输入2,这意味着宽度是高度的两倍,或者1.5表示宽度是高度的1.5倍。
以下是原始函数:
现在我正在尝试弄清楚如何修改此公式以考虑椭圆或椭圆形。我想到了先绘制一个圆形组件,然后在绘制完毕后进行拉伸的想法,但这不是一个干净的解决方案,因为我正在绘制的图形已经是椭圆形状。
我需要向这个函数添加一个参数,告诉它宽度/高度之间的比率,以便它知道如何偏移这个点。默认情况下,此参数应为1,表示宽度=高度,即没有椭圆形状的绘制或偏移。但是假设我输入2,这意味着宽度是高度的两倍,或者1.5表示宽度是高度的1.5倍。
以下是原始函数:
function NewPosition(Center: TPoint; Distance: Integer; Degrees: Single): TPoint;
var
Radians: Real;
begin
//Convert angle from degrees to radians; Subtract 135 to bring position to 0 Degrees
Radians:= (Degrees - 135) * Pi / 180;
Result.X:= Trunc(Distance*Cos(Radians)-Distance*Sin(Radians))+Center.X;
Result.Y:= Trunc(Distance*Sin(Radians)+Distance*Cos(Radians))+Center.Y;
end;
这里是我需要的添加参数:
function NewPosition(Center: TPoint; Distance: Integer; Degrees: Single;
OvalOffset: Single = 1): TPoint;
var
Radians: Real;
begin
//Convert angle from degrees to radians; Subtract 135 to bring position to 0 Degrees
Radians:= (Degrees - 135) * Pi / 180;
Result.X:= Trunc(Distance*Cos(Radians)-Distance*Sin(Radians))+Center.X;
Result.Y:= Trunc(Distance*Sin(Radians)+Distance*Cos(Radians))+Center.Y;
end;
定义:
- 中心 = 椭圆的中心点,用于计算基准
- 距离 = 从中心点向任意方向的距离,与角度无关
- 角度 = 围绕中心点的角度数,从上右开始计算
- OvalOffset = 宽度和高度之间差异的比率