gpt4 book ai didi

delphi - 德尔福图抛物线与分辨率

转载 作者:行者123 更新时间:2023-12-03 12:13:46 26 4
gpt4 key购买 nike

我已经看过this示例,并且已经阅读/看过许多文档/视频,但是我被困在特定的地方。我已使用此代码在PlotGrid中绘制抛物线。

procedure TForm1.PlotGridPaint(Sender: TObject; Canvas: TCanvas;
const [Ref] ARect: TRectF);
var i: integer;
x: double;
FPoints: TPolygon;
xPixels, yPixels: double;
Origin: TPointF;
begin
SetLength(FPoints, 600);
PlotGrid.Canvas.Stroke.Color := TAlphaColorRec.Darkred;
PlotGrid.Canvas.Stroke.Thickness := 2;

//sizes
Origin.X := PlotGrid.Width/2;
Origin.Y := PlotGrid.Height/2;
x := -300;

for I := 0 to High(FPoints) do
begin
FPoints[I].X := Origin.x + x;
FPoints[I].Y := Origin.y - (x*x); //plot f(x) = x^2
x := x + 1;
end;

for i := 1 to High(FPoints) do
begin
Canvas.DrawLine(FPoints[i-1], FPoints[i], 1);
end;
end;


此代码有效,并产生此输出。 this

如您所见,它是一个(奇怪的)函数x ^ 2。当然,以下代码行表示方程式:

FPoints[I].Y := Origin.y - (x*x); //plot f(x) = x^2


如果使用 Origin.y - (2*x*x - 5)更改了上面的代码,则意味着我要绘制f(x)= 2x ^ 2-5。我想指出一下:


我正在使用Firemonkey,但不像VCL那样支持Beizer
函数x ^ 2仅作为示例,我希望能够绘制各种抛物线。


该代码可以正常工作,因为它绘制了正确的抛物线,但由于缺乏分辨率,因此结果不是最佳的。我希望能够“放大”抛物线,并且尝试操纵X坐标,但是效果不佳。

你有什么主意吗?如何缩放抛物线并根据屏幕尺寸更改分辨率?

我当时想这样做,但这似乎是错误的方式:

for I := 0 to High(FPoints) do
begin
FPoints[I].X := Origin.x + x * 30;
FPoints[I].Y := Origin.y - (-x*x) * 30;
x := x + 1;
end;


结果是这样的:

enter image description here

更好,但是曲线不是“平滑的”,我添加了30的乘数。我不确定它是否也可以在移动设备上正常工作。有什么建议吗?

最佳答案

当您将点坐标相乘时,确实确实放大了抛物线底部,但由于降低了点的频率,因此使图像更加粗糙。您实际上想做相反的事情,放大但保持(或增加)点频率。显然,您还考虑了屏幕上的像素而选择了x值的范围,但是使用x ^ 2函数时,y值很快就会出现在屏幕外,因此您需要缩放y值。

我建议您像现在一样保留x值,并按y值缩放

FPoints[i].Y := Origin.Y - (x * x * 0.1); // plot f(x) = x^2 * 0.1


我进行了一个测试,添加了另一个 TPolygon并将其赋予y值

FPoints2[i].Y := Origin.Y - (x * x * 0.01); // plot f(x) = x^2 * 0.01


第二个系列被漆成深蓝色,其结果是:

enter image description here

关于delphi - 德尔福图抛物线与分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40620118/

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