【发布时间】:2011-12-08 15:33:39
【问题描述】:
我在下面的函数中有这个公式。这是一个相当简单的概念,但这个公式花了我将近 2 周的时间才变得完美。它的作用是计算将对象放置在给定角度的位置以及距中心点的距离。它对于手动绘制圆圈很有用,而且我主要将它用于我的针规组件。它计算在哪里画针。
现在我想弄清楚如何修改这个公式以将椭圆或椭圆考虑在内。我确实想到了先将组件绘制成圆形,然后在绘制完所有内容后拉伸它的想法,但这不是一个干净的解决方案,因为我正在做的绘图已经是椭圆形了。
我只需要向这个函数添加一个参数来告诉它宽度/高度之间的比率,以便它知道如何偏移这个点。默认情况下,此参数应为 1,表示 Width=Height,表示没有椭圆绘制或偏移。但是假设我输入 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;
定义:
- Center = 计算基础的中心点(椭圆中心)
- 距离 = 在任何方向上离中心有多远,与度数无关
- 度数 = 围绕中心点的度数,从右上方开始
- OvalOffset = 宽度和高度之间的差异比率
【问题讨论】:
-
椭圆对称轴是水平的还是垂直的?
-
是的,我不关心椭圆的旋转,只是宽度与高度不同。
-
只是澄清一下:NewPosition 的结果应该具有给定的距中心的距离,并且在度数给定的角度上?至少这是我从你的定义中读到的。
-
没错。我已经有这个工作了,不需要更多的帮助,除非你想用它做一些更有趣的事情?例如,添加将这个椭圆旋转到一定程度的能力?不过不重要,谢谢。
-
在这种情况下,您的问题有些不清楚。给定一个固定距离和不同程度的函数,大多数结果点到中心的距离将与指定的不同。对于椭圆曲线,距离和度数的值通常与每个点的测量距离和度数不匹配。
标签: delphi math drawing delphi-7