Forum
Grundkurs
»Introduktion
»Snabbguide
»Komponenter
»Händelser
»Strängar
»Räkna med Delphi »Egna
typer
»Selektion
»Iteration
»Menyer
»Funktioner
»Arraystrukturer
Tips & Tricks
»Nya tips
»Blandat
»Databaser
»Filer
»Forms
»Grafik
»Internet
»Komponenter
»Matematik
»Multimedia
»Objekt/ActiveX
»Skrivare
»Strängar
»System
»Mest lästa tips
Artiklar
»Delphi och ADO
»Bygga en DLL
»Skapa en enkel rapport
»Hantera registret
»Enheter, units
»Klassen TCanvas
»Använd LookUp Controls
Nya
tips
Lägg
till tips
Delphilänkar
Gästbok
|
|
|
|
Kalkylera en vinkel från två punkter
|
Kategori: Matematik
Inlagt: 2006-08-20
Läst: 1349
Inlagt av: Staffan Berg
|
Beskrivning |
Detta exempel räknar ut vinkeln som skapas med hjälp av två givna punkter.
|
Kod |
const RADTODEG = 180 / Pi; function AngleOfPt(pt : TPoint) : double; begin Result := 0; if ((Pt.x = 0) and (Pt.y < 0)) then Result := 270 else if ((Pt.x = 0) and (Pt.y > 0)) then Result := 90 else if ((Pt.x > 0) and (Pt.y >= 0)) then Result := ArcTan(Pt.y / Pt.x) * RADTODEG else if ((Pt.x < 0) And (Pt.y > 0)) then Result := 180 - (ArcTan(Pt.y / Abs(Pt.x))* RADTODEG) else if ((Pt.x < 0) And (Pt.y <= 0)) then Result := 180 + (ArcTan(Pt.y / Pt.x) * RADTODEG) else if ((Pt.x > 0) and (Pt.y < 0)) then Result := 360 - (ArcTan(Abs(Pt.y) / Pt.x) * RADTODEG) else Result:=0; end; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var XYMove : TPoint; RotateAngle : Double; begin XYMove := (Point(x - (Form1.Width div 2), (Form1.Height div 2) - y)); RotateAngle := AngleOfPt(XYMove); Form1.Caption := IntToStr(XYMove.x) + #32 + IntToStr(XYMove.y) + ' = ' + FloatToStr(RotateAngle); end; procedure TForm1.FormPaint(Sender: TObject); begin Form1.Canvas.MoveTo(Form1.Width div 2, 0); Form1.Canvas.LineTo(Form1.Width div 2, Form1.Height); Form1.Canvas.MoveTo(0, Form1.Height div 2); Form1.Canvas.LineTo(Form1.Width, Form1.Height div 2); end; procedure TForm1.FormResize(Sender: TObject); begin Invalidate; end;
|
|
|