gpt4 book ai didi

delphi - 将公式从围绕圆的计算修改为围绕椭圆的计算?

转载 作者:行者123 更新时间:2023-12-03 15:00:39 24 4
gpt4 key购买 nike

我在下面的函数中有这个公式。这是一个相当简单的概念,但这个公式花了我近两周的时间才变得完美。它的作用是计算在给定的角度和距中心点的距离处放置物体的点。它对于手动绘制圆圈很有用,而且我主要将它用于我的针规组件。它计算在哪里画针。

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

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

定义:

  • Center = 计算基础的中心点(椭圆中心)
  • 距离 = 任意方向距中心的距离,无论度数如何
  • 度数 = 从右上角开始围绕中心点的度数
  • OvalOffset = 宽度和高度之差的比率

enter image description here

最佳答案

将除以 OvalOffset 添加到 Result.Y 公式中...

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

关于delphi - 将公式从围绕圆的计算修改为围绕椭圆的计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8433443/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com