我已經看到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;
正如你可以看到它是一個(奇怪的)函數x^2。當然這行的代碼表示的公式:
FPoints[I].Y := Origin.y - (x*x); //plot f(x) = x^2
如果我改變上面的代碼與Origin.y - (2*x*x - 5)
這意味着我要繪製F(X)= 2×^ 2 - 5.我想指出的是:
- 我使用Firemonkey,它不支持Beizer像VCL確實
- 函數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;
結果是這樣的:
這是更好,但曲線不是「平穩「並且我增加了一個30的乘數。我不確定它是否可以在移動設備上正常工作。任何建議?
作爲一個可能有用的位信息 - 每個拋物線y = ax^2 + bx + c,其中a <> 0在您可以繪製的意義上是相同的,如下所示。繪製一個未縮放的基本拋物線y = x^2(例如上面的Tom的藍色拋物線),然後適當地替換圖形軸的原點和x尺度以及y尺度。 – Penguino