Jer*_*dge 6 delphi math drawing delphi-7
我在下面的函数中有这个公式.这是一个相当简单的概念,但这个公式花了我差不多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;
Run Code Online (Sandbox Code Playgroud)
这是我需要的附加参数:
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;
Run Code Online (Sandbox Code Playgroud)
定义:

通过添加一个部门OvalOffset,只是将Result.Y公式...
Result.Y:= Trunc((Distance*Sin(Radians)+Distance*Cos(Radians))/OvalOffset)
+Center.Y;
Run Code Online (Sandbox Code Playgroud)