gpt4 book ai didi

delphi - 将 TCanvas.Pie 坐标转换为 GDI+ DrawPie

转载 作者:行者123 更新时间:2023-12-02 07:57:06 26 4
gpt4 key购买 nike

我需要创建一个过程,例如:

procedure GdiPie(Canvas: TCanvas; X1: Integer; Y1: Integer; X2: Integer; Y2: Integer; X3: Integer; Y3: Integer; X4: Integer; Y4: Integer);
var gr: TGPGraphics;
begin
...
gr.DrawPie(brush, X1, Y1, X2 - X1, Y2 - Y1, ???) // calculate "startAngle, sweepAngle"
end;

它采用与 TCanvas.Pie 相同的参数并转换为需要参数的 TGPGraphics.DrawPie :x、y、宽度、高度、起始角度、扫描角度

X1,Y1,X2,Y3很简单。但是,给定 X3,Y3,X4,Y4 时,如何计算 startAngle、sweepAngle

我找到了这个链接:How to create a pie chart 。但我似乎仍然无法“逆转”它的工作。

最佳答案

您可以使用以下公式计算起始角度和结束角度:

CX := (X1 + X2) / 2; // center of bounding rectangle
CY := (Y1 + Y2) / 2;
aStart := ArcTan2(Y3 - CY, X3 - CX);
aEnd := ArcTan2(Y4 - CY, X4 - CX);
SweepAngle := aEnd - AStart

不要忘记 ArcTan 范围和 SweepAngle 可能的 +-2*Pi 偏移量(计算为差值)

另一种方法(通过点积和交叉向量积):

SweepAngle := ArcTan2((X3 - CX) * (Y4 - CY) - (X4 - CX) * (Y3 - CY),
(X3 - CX) * (X4 - CX) + (Y3 - CY) * (Y4 - CY));

看来您需要以度为单位的角度,因此请应用RadToDeg函数。

关于delphi - 将 TCanvas.Pie 坐标转换为 GDI+ DrawPie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37867344/

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