修改公式从围绕圆计算到椭圆周围?

时间:2011-12-08 15:33:40

标签: delphi math drawing delphi-7

我在下面的函数中有这个公式。这是一个相当简单的概念,但这个公式花了我差不多2个星期才完美。它的作用是计算将物体放置在给定角度的距离和距离中心点的距离。它对于手动绘制圆圈非常有用,而且我主要将它用于我的针规组件。它计算在哪里画针。

现在我想弄清楚如何修改这个公式以考虑椭圆或椭圆。我确实想到了首先绘制一个圆形的组件,然后在绘制完所有内容后拉伸它的想法,但这不是一个干净的解决方案,因为我正在做的绘图已经是椭圆形。< / p>

我需要在此函数中添加一个参数来告诉它宽度/高度之间的比例,以便它知道如何偏移此点。默认情况下,此参数应为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;

定义:

  • 中心=从(椭圆中心)
  • 计算基础的中心点
  • 距离=中心在任何方向上的距离,无论是否为度数
  • 度=中心点附近有多少度,从右上角开始
  • OvalOffset =宽度和高度之差

enter image description here

1 个答案:

答案 0 :(得分:6)

OvalOffset添加除Result.Y公式...

Result.Y:= Trunc((Distance*Sin(Radians)+Distance*Cos(Radians))/OvalOffset)
           +Center.Y;