Delphi 如何画抛物线

Delphi 如何画抛物线,delphi,lazarus,Delphi,Lazarus,我使用Lazarus是因为我非常喜欢TChart组件。我制作了一个程序,可以解决一些不等式,如: (δ=判别式)2x^2+6x+4>0的解是x-1。这是正确的,但正如您所看到的,我在下面有一个t图片组件,它显示了一个带有图表的图片。我是用Gimp做的 我想用一些合适的组件制作一张图表。正如我已经说过的,我在Lazarus上找到了它们,但是你知道在Delphi XE5上也有什么方法吗?我在哪里可以看一看?首先,你的集合符号很奇怪。你是说S=(−∞, −2) ∪ (−1.∞), 也就是说,S是两个

我使用Lazarus是因为我非常喜欢
TChart
组件。我制作了一个程序,可以解决一些不等式,如:

(δ=判别式)2x^2+6x+4>0的解是
x-1
。这是正确的,但正如您所看到的,我在下面有一个
t图片
组件,它显示了一个带有图表的图片。我是用Gimp做的


我想用一些合适的组件制作一张图表。正如我已经说过的,我在Lazarus上找到了它们,但是你知道在Delphi XE5上也有什么方法吗?我在哪里可以看一看?

首先,你的集合符号很奇怪。你是说S=(−∞, −2) ∪ (−1.∞), 也就是说,S是两个开放区间的并集。您还可以写入S=[−2.−1] ^C或S={x∈ ℝ: x<−2或x>−1} 还有,你的照片肯定不是抛物线,它看起来更像双曲线

无论如何,绘制函数f的图形:ℝ → ℝ 很简单。您只需要处理逻辑坐标系和屏幕坐标系之间的坐标转换。定义

type
  TRealVector = record
    X, Y: real;
  end;
作为重点ℝ你的地图是什么

const
  xmin = -10;
  xmax = 10;
  ymin = -10;
  ymax = 10;

function TForm5.LogToScreen(LogPoint: TRealVector): TPoint;
begin
  result.X := round(ClientWidth * (LogPoint.X - xmin) / (xmax - xmin));
  result.Y := ClientHeight - round(ClientHeight * (LogPoint.Y - ymin) / (ymax - ymin));
end;

function TForm5.ScreenToLog(ScreenPoint: TPoint): TRealVector;
begin
  result.X := xmin + (ScreenPoint.X / ClientWidth) * (xmax - xmin);
  result.Y := ymin + (ymax - ymin) * (ClientHeight - ScreenPoint.Y) / ClientHeight;
end;
那你只需要策划

procedure TForm5.FormPaint(Sender: TObject);
var
  PrevPoint, CurrPoint: TPoint;
  x: integer;
  logx: real;
  logy: real;
  y: integer;
begin
  PrevPoint := Point(-1, -1);
  Canvas.Brush.Color := clWhite;
  Canvas.FillRect(ClientRect);
  for x := 0 to ClientWidth - 1 do
  begin
    logx := ScreenToLog(Point(x, 0)).X;
    logy := logx*logx; // y = f(x)
    y := LogToScreen(RealVector(logx, logy)).Y;
    CurrPoint := Point(x, y);
    if PrevPoint.X = -1 then
      Canvas.MoveTo(CurrPoint.X, CurrPoint.Y)
    else
      Canvas.LineTo(CurrPoint.X, CurrPoint.Y);
    PrevPoint := CurrPoint;
  end;
end;
别忘了:

procedure TForm5.FormResize(Sender: TObject);
begin
  Invalidate;
end;


(来源:)

你的集合表示法很奇怪。你的意思是S=(−∞, −2) ∪ (−1.∞), 也就是说,S是两个开放区间的并集。您还可以写入S=[−2.−1] ^C或S={x∈ ℝ: x<−2或x>−1}。此外,您的图片当然不是抛物线;它看起来更像双曲线。您可以在感兴趣的时间间隔内绘制曲线,并使用该曲线代替手绘图片……或者我误解了什么吗?只是检查了;它包含TeeChart标准,因此Delphi XE5中提供了
TChart
组件(如果你喜欢的话)。由于Lazarus的价格比XE5的任何部分都要低,我认为这不是一个选择。