Страница 1 из 1

Равносторонний треугольник на канве Image

Добавлено: 09 ноя 2006, 16:39
Rudolf
Вобщем приложение в Delphi и мне надо построить равносторонний треугольник центр которого совпадает с центром 2мерной системы координат, при этом пользователь должен сам задать длину стороны...
Вся проблема у меня заключается в том что я не могу понять алгоритм построения именно в центре...Принцип действия я выбрал такой такой:пользователь отмечает на канве 2 точки(длину стороны), затем рисуется треугольник со сторонами такой же длины...но вот как запомнить эту длину и еще нарисовать я не знаю.Если кто знает подскажите пожалста( мне главное алгоритм...)

Код: Выделить всё

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, Buttons, StdCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
var x1,y1: array [0..10] of integer;
    i:Integer;
    ln:real;

procedure TForm1.FormCreate(Sender: TObject);
begin
i:=0;
x1[0]:=Image1.Width div 2;
y1[0]:=Image1.Height div 2;
end;

//Отмечаем точки
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if i<2 then begin
  inc(i);
  with Image1.Canvas do
  ellipse(x,y,x+5,y+5);
  if i=1 then begin
  x1[1]:=x-Image1.Width div 2;
  y1[1]:=-(y-Image1.Height div 2);
  end;
  if i=2 then begin
  x1[2]:=x-Image1.Width div 2;
  y1[2]:=-(y-Image1.Height div 2);
  end;
  end
  else showMessage('  ');

end;
procedure TForm1.Button1Click(Sender: TObject);

begin
  ln:=sqrt(sqr(x1[1]-x1[2]) + sqr(y1[1]-y1[2]));//находим длину отрезка
  
      With image1.Canvas do begin
//Оси
      MoveTo(Image1.Width div 2,0);          
      LineTo(Image1.Width div 2,Image1.Height);
      MoveTo(0,Image1.Height div 2 );        
      LineTo(Image1.Width,Image1.Height div 2);

     end;
end;
end.

Добавлено: 09 ноя 2006, 21:04
Rudolf
Все сам сделал :) Помощь уже не нужна