AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Rechtwinkeliges Dreieck zeichnen

Rechtwinkeliges Dreieck zeichnen

Ein Thema von BlueStarHH · begonnen am 12. Mär 2006 · letzter Beitrag vom 12. Mär 2006
Antwort Antwort
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
797 Beiträge
 
Delphi 11 Alexandria
 
#1

Rechtwinkeliges Dreieck zeichnen

  Alt 12. Mär 2006, 15:02
Wie kann ich ein rechtwinkeliges Dreieck zeichnen? Ich habe den nur den Anfgangs- und Endpunkt der längsten Seite. Die beiden anderen Winkel sollen je immer 45 Grad sein. Wie kann ich nun die XY-Koordinaten des 90-Grad-Winkels berechnen? Dann kann ich einfach mit LineTo() alles zu einem Dreieck verbinden. Danke!
  Mit Zitat antworten Zitat
dummzeuch
(Gast)

n/a Beiträge
 
#2

Re: Rechtwinkeliges Dreieck zeichnen

  Alt 12. Mär 2006, 15:05
Selbst mit diesen Angaben gibt es noch zwei Moeglichkeiten: Die Spitze koennte in zwei Richtungen zeigen.
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
797 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Rechtwinkeliges Dreieck zeichnen

  Alt 12. Mär 2006, 15:07
Zitat von dummzeuch:
Selbst mit diesen Angaben gibt es noch zwei Moeglichkeiten: Die Spitze koennte in zwei Richtungen zeigen.
Ich brauche beide Möglichkeiten. Am Besten wäre also eine Funktion, wo ich die Richtung (unten/oben) angeben kann.
  Mit Zitat antworten Zitat
Mr. Pink

Registriert seit: 30. Jan 2006
72 Beiträge
 
#4

Re: Rechtwinkeliges Dreieck zeichnen

  Alt 12. Mär 2006, 15:12
der Punkt, in dem der rechte winkel anliegt, ist genau über/unter der mitte der hypothenuse und zwar im abstand der hälfte der hypothenuse; also würde man eine orthogonale zur hypothenuse, durch deren mitte zeichnen, würde der punkt auf der graden liegen!

btw, das is jetzt nur eine übelegung, ob es jetzt ganz richtig ist weiß ich nicht, kommt mir aber relativ plausibel vor^^
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#5

Re: Rechtwinkeliges Dreieck zeichnen

  Alt 12. Mär 2006, 15:22
du brauchst nur die höhe mit pythagoras zu berechnen.

Ansatz: h²+(a/2)²=a²
  Mit Zitat antworten Zitat
dummzeuch
(Gast)

n/a Beiträge
 
#6

Re: Rechtwinkeliges Dreieck zeichnen

  Alt 12. Mär 2006, 15:25
Hm,

A = (ax, ay)
B = (bx, by)
M = A + (B - A) / 2 (Mittelpunkt der Hypothenuse)

M = (ax, ay) + ((bx-ax)/2, (by-ay)/2)

Wenn ich mch jetzt noch erinnern koennte, wie man einen Vektor um 90 Grad dreht....

Ach ja: Koordinaten vertauschen und eine davon negativ nehmen:

Vektor von A nach B: ((bx-ax),(by-ay))
Vektor senkrecht dazu:
1. (-(by-ay),(bx-ax)) = (ay-by,bx-ax)
2. ((by-ay),-(bx-ax)) = (by-ay,ax-bx)

Daraus ergibt sich dann:

1. C = (ax, ay) + ((bx-ax)/2, (by-ay)/2) + ((ay-by)/2,(bx-ax)/2)
2. C = (ax, ay) + ((bx-ax)/2, (by-ay)/2) + ((by-ay)/2,(ax-bx)/2)

Mann, mein Mathe ist schon verdammt lange her. OK, als Delphi Prozedur:

Delphi-Quellcode:
procedure GleichschenkligRechtwinkligesDreieck(A, B: TPoint; out C1, C2: TPoint);
var
  AB2: TPoint; // Vektor AB / 2
  H1, H2: TPoint; // Hoehe 1 und 2
begin
  AB2 := Point(Round((B.x - A.x) / 2), Round((B.y - A.y) / 2));
  H1 := Point(Round((A.y - B.y) / 2), Round((B.x - A.x) / 2));
  H2 := Point(Round((B.y - A.y) / 2), Round((A.x - B.x) / 2));
  C1 := Point(A.x + AB2.x + H1.x, A.y + AB2.y + H1.y);
  C2 := Point(A.x + AB2.x + H2.x, A.y + AB2.y + H2.y);
end;
Das muesste es tun, aber ich habe es nicht ausprobiert.
  Mit Zitat antworten Zitat
DevilsCamp
(Gast)

n/a Beiträge
 
#7

Re: Rechtwinkeliges Dreieck zeichnen

  Alt 12. Mär 2006, 15:31
Also mit Hilfe von Sinus und dem Winkel ist es doch kein Problem:

Länge der Hypothenuse = a (start bei a1, Ende bei a2);

Da der Winkel al=45° => Katheten sind gleich lang


Zum zeichnen einer 45° Linie bei Delphi:
Delphi-Quellcode:
MoveTo(x,y);
LineTo(x+d1,y+d1);
Da bei 45° die Höhe die Hypothenuse genau bei a/2 schneidet, kannst du d1 ohne Probleme berechnen (vorausgesetzt, die Hypothenuse ist eine Waagrechte bzw. Senkrechte).

Ansonsten musst du x und y der Spitze berechnen.
Dazu benötigst du noch den Winkel der Hypothenuse zur Waagrechten.
Diese Berechnung sollte mit Hilfe einfacher Winkel-Berechnungen kein Problem sein.
Und das ist nun deine Hausaufgabe
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
797 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Rechtwinkeliges Dreieck zeichnen

  Alt 12. Mär 2006, 16:00
Danke, mit eurer Hilfe habe ich es geschafft:

Delphi-Quellcode:
{**
  Zeichnet ein rechtwinkliges Dreieck mit Alpha 45°, Beta=45° und waagerechter
  Hypotenuse.

  @param Canvas Zeichenfläche.
  @param TopLeft Startpunkt der Hypotenuse.
  @param Width Breite der Hypotenuse.
  @param SpikeTop Spitze ober- oder unterhalb der Hypotenuse zeichnen?
  @return Position der Spitze.
*}


function DrawTriangle90(Canvas: TCanvas; TopLeft: TPoint; Width: Integer;
  SpikeTop: Boolean): TPoint;
var
  H, Direction: Integer;
begin

  if SpikeTop then
    Direction := -1
  else
    Direction := 1;

  H := Width div 2;
  Result := Point(TopLeft.X + H, TopLeft.Y + H * Direction);
  Canvas.Polygon([TopLeft, Point(TopLeft.X + Width, TopLeft.Y), Result]);
end;

Beispiel:
  DrawTriangle90(PaintBox1.Canvas, Point(50, 60), 30, True);
  Mit Zitat antworten Zitat
dummzeuch
(Gast)

n/a Beiträge
 
#9

Re: Rechtwinkeliges Dreieck zeichnen

  Alt 12. Mär 2006, 16:05
Zitat:
Zeichnet ein rechtwinkliges Dreieck mit Alpha 45°, Beta=45° und waagerechter
Hypotenuse.
Dass die Hypothenuse waagerecht ist, haettest Du aber ruhig vorher sagen koennen. Dann haette ich mir nicht mit der Vektorrechnung einen abgebrochen. ;-)
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
797 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Rechtwinkeliges Dreieck zeichnen

  Alt 12. Mär 2006, 17:01
Zitat von dummzeuch:
Dass die Hypothenuse waagerecht ist, haettest Du aber ruhig vorher sagen koennen. Dann haette ich mir nicht mit der Vektorrechnung einen abgebrochen.
Sorry, ich habe zwar daran gedacht, es aber vergessen hier zu schreiben. Naja vielleicht ist Deine Vektorrechnung für andere hilfreich.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz