- Delphiartiklar, tips, forum, länksamling - 

      

START | DELPHI | LÄNKARGÄSTBOK 




 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: 1267
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; 

 
 
© Copyright 2005 - Staffan Berg
- Alla rättigheter förbehålles -