Autor |
Beitrag |
WormHole
      
Beiträge: 145
|
Verfasst: Di 17.05.05 14:34
Wie kann ich ein Dreieck auf Grund von Angaben zeichnen? Also Eingabe:
a = 3 cm
b = 4 cm
c = 5 cm
Dann soll der das Zeichnen... Danke für Antworten!
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Di 17.05.05 14:37
Gar nicht  . Abgesehen davon, dass der PC nicht mit Zentimetern, sondern mit Pixel rechnet, wirst du noch das Problem haben, dass du ein Dreieck nicht einfach nur aus 3 Seitenlängen zeichnen kannst - du bräuchtest mindestens einen Winkel oder zumindest eine Routine, die die nötigen Koordinaten des Schnittpunktes von a und b berechnet (c ist malm als Grundlinie angenommen).
Tipp: TCanvas.LineTo
AXMD
|
|
WormHole 
      
Beiträge: 145
|
Verfasst: Di 17.05.05 14:56
Das Problem mit den cm habe ich schon gelöst
Also brauch man wenigstens einen Winkel? Gut dann angenommen:
alpha = 60°
b = 5 cm
c = 6 cm
Wie kann ich denn mit lineto sagen das der in einem 60° Winkel zeichnen soll?
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Di 17.05.05 14:57
Ich denke schon, dass das möglich ist.
erster Schritt: Zeichne Linie a. z.B. von Pa=(0,0) nach Pb=(a,0)
Man benötigrt jetzt die Koordianten des dritten Punktes Pc=(Xc,Yc). Für die Punkte, die von (0,0) so weit entfernt sind, wie Linie b lang ist, gilt: Xc^2+Yc^2=b^2
Außerdem gilt ((Xc-a)^2 + Yc^2 = c^2)
Aus der ersten Gleichung folgt:
Xc=sqrt(b^2-Yc^2) Das eingesetzt in die andere Gleichung ergibt (((sqrt(b^2-Yc^2))-a)^2 + Yc^2 = c^2)
Wenn ich micht jetzt auf die Schnelle nicht verrechnet habe, erhält man für Yc:
Quelltext 1:
| Yc^2= b^2- [ (a^2+b^2-c^2) / (2a) ]^2 |
Damit hast du die Koordinaten des dritten Punktes. Wenn du das Dreieck an anderen Stellen zeichnen lassen willst, muss du es nur noch verschieben, indem du alle Punkte um den gleichen Wert änderst.
_________________ We are, we were and will not be.
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Di 17.05.05 16:06
WormHole hat folgendes geschrieben: | Wie kann ich ein Dreieck auf Grund von Angaben zeichnen? Also Eingabe:
a = 3 cm
b = 4 cm
c = 5 cm
Dann soll der das Zeichnen... Danke für Antworten! |
Ein beliebiges Dreieck hat 6 Freiheitsgrade. Du brauchst also mindestens 6 Werte. (Beliebig bedeutet: Beliebige Ausrichtung und Position)
|
|
WormHole 
      
Beiträge: 145
|
Verfasst: Di 17.05.05 16:08
@ Gausi
Also ich muss sagen, dass ich das noch nicht richtig verstanden habe! Es wäre wirklich nett, wenn du mir das vielleicht noch einmal erklären könntest
Ach und ich weiß nicht, ob ich das richtig verstanden habe, aber die Strecke von Punkt A nach Punkt B ist c. Die Strecke ist immer gegenüberliegend des Punktes!
@ Delphiphan
6 Werte? In der Schule kann man das auch mit nur 3 Werten machen. Seite, Winkel, Seite / Winkel, Seite, Winkel ... und so weiter! Warum brauch man denn 6 Werte?
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Di 17.05.05 16:21
Wenn du folgende Aufgabe siehst
Zeichne ein Dreieck mit: a = 3 cm, b = 4 cm, c = 5 cm
dann nimmst du den Bleistift und fängst an irgendwo auf dem Blatt, ganz zufällig mal eine Seite zu zeichnen. Jeder eurer Klasse würde das Dreieck anders zeichnen: Andere Position auf dem Blatt, anderer Winkel, mal gespiegelt, mal auf dem Kopf, usw..
Der Computer braucht aber genaue Informationen WO das Dreieck gezeichnet werden soll, und WIE es ausgerichtet ist.
__b__
/| |\ | /
c/ |b b| \c a| /c
/____| |____\ |/
a a
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Di 17.05.05 16:27
Gut, ich bin dann evtl. auf die Schnelle etwas mit den Bezeichnungen durcheinandergekommen. Was ich meinte, wird hoffentlich an der Skizze im Anhang deutlicher. Trick ist es, mit Hilfe des Pytagoras die Gleichungen der beiden Kreise zu bestimmen, die man auch für das Zeichnen per Hand malen würde. Durch lösen des Gleichungssystem nach x und y erhält man den Schnittpunkt der beiden Kreise.
Man muss nur noch abfangen, dass der Schnittpunkt überhaupt existiert, und auch bdedenken, dass man sich für einen der Schnittpunkte entscheiden muss, wenn es zwei gibt.
Einloggen, um Attachments anzusehen!
_________________ We are, we were and will not be.
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Di 17.05.05 16:32
//Edit: Diesen Post könnt ihr eigenetlich löschen. Sorry für die Umstände. Die 3 Posts nach diesem beziehen sich ohnehin nicht auf diesen.
Zuletzt bearbeitet von delfiphan am Di 17.05.05 17:11, insgesamt 4-mal bearbeitet
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Di 17.05.05 16:39
wenn alle drei seiten bekannt sind, braucht man doch keinen winkel, aber eine koordinate wäre ganz hilfreich, ändert aber am dreieck nichst, und der winkel ist dann halt nur in welche richtung das dreieck gedreht ist 
|
|
rjan
      
Beiträge: 40
Win XP, WIN 2000, Win 98, Win 95, Win 3.11
D5 Stand /D7 enterp/2k5 pers.
|
Verfasst: Di 17.05.05 16:39
@delfiephan (oder so) Wat wilste mit freiheitsgraden ...
BEI DREIECKEN BEI DENEN DREI INFORMTIONEN GEGEBEN SIND , IST EIN DREIECK (BIS AUF ZWEI DREI FÄLLE) KLAR DEFFINIERT :::> DAS LERNT MAN IN DER 9 ten klass...
als lösung gibt es die möglihkeit über sinus cosinus und tangenz dies zu lösen....
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Di 17.05.05 16:39
sag ich doch  , das war wieder sonn sekunden ding, als meiner fertig war, stand deiner auch schon da 
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Di 17.05.05 16:48
Hoppla, das ging anfänglich an den falschen Ort. Also hier nochmals:
x^2+y^2 = a^2
(x-c)^2+y^2 = b^2
Die Skizze dazu:
x,y
/ \
a/ \b
/_________\
0,0 c,0
Die Lösung:
x = 1/2*(c^2+a^2-b^2)/c
y = 1/2*sqrt((a+b+c)*(b+c-a)*(a+b-c)*(a+c-b))/c (2. Lösung wäre einfach gespiegelt)
Dabei muss gelten: a+b>=c, a+c>=b, b+c>=a, damit es eine reelle Lösung gibt.
Somit zeichnest du das Polygon (0,0),(0,c),(x,y) und alle hier sind glücklich. Jedoch ist das halt nicht die einzige Lösung, sondern einfach eine. Es gibt unendlich viele Lösungen.
Aber schaut mal hier nach: de.wikipedia.org/wiki/Dreieck da gibts viele, viele Sätze, einige helfen bestimmt weiter.
rjan: Fast, *hust*, "delfiphan", heisst es korrekt. Nun zu deiner Bemerkung: Worüber regst du dich überhaupt auf? Du hast mich wohl falsch verstanden. Ich hab doch sogar ASCII-Zeichnungen gemacht zur Illustration, dass es nicht eindeutig ist. Ich spreche von Dreiecken, du sprichst von kongruenten Dreiecken; aber das bringt dem PC herzlich wenig, denn da sind konkrete Koordinaten gefragt, und die sind nun mal nicht eindeutig, wenn nur 3 Zahlen gegeben sind.
Es sind i.A. 6 Zahlen nötig, damit ein Dreieck eindeutig ist (z.B. 3x2D-Koordinaten; oder a+b+c+Koordinaten des Schwerpunktes+Winkel; oder, wer's mathematisch mag: Einheitsdreieck+affine Transformation=beliebiges Dreieck. Affine Transformation = 2x2-Matrix+Translationsvektor. Dabei hat diese 2x2 Matrix i.A. vollen Rang, ist also nicht singulär => 4+2=6)
|
|
rjan
      
Beiträge: 40
Win XP, WIN 2000, Win 98, Win 95, Win 3.11
D5 Stand /D7 enterp/2k5 pers.
|
Verfasst: Di 17.05.05 18:39
ok kappiert .... ascii zeichnungen sind nicht mein lieblings bereich
|
|
WormHole 
      
Beiträge: 145
|
Verfasst: Di 17.05.05 20:32
Ich muss mal sagen hier wurde ja einiges am Thema vorbei geredet! Dank Delfiphan habe ich nun doch die Formel... wenn ich mich nicht täusche...
Delfiphan hat folgendes geschrieben: | Hoppla, das ging anfänglich an den falschen Ort. Also hier nochmals:
x^2+y^2 = a^2
(x-c)^2+y^2 = b^2
Die Lösung:
x = 1/2*(c^2+a^2-b^2)/c
y = 1/2*sqrt((a+b+c)*(b+c-a)*(a+b-c)*(a+c-b))/c (2. Lösung wäre einfach gespiegelt) |
Was ist denn sqrt? Dann hab ichs langsam  Oder am besten noch mit Beispiel mal machen ^^
greetz WormHole
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Di 17.05.05 20:48
sqrt ist die Quadratwurzel. Und sqr bedeutet "im Quadrat".
Beispiel:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var a, b, c, x, y: Extended; begin c := 100; a := 80; b := 90; x := 1/2*(sqr(c)+sqr(a)-sqr(b))/c; y := 1/2*sqrt((a+b+c)*(b+c-a)*(a+b-c)*(a+c-b))/c; Image1.Canvas.Polygon([Point(0,0),Point(Round(c),0), Point(Round(x),Round(y))]); end; |
|
|
WormHole 
      
Beiträge: 145
|
Verfasst: Di 17.05.05 21:24
@ Delfiphan
Du bist mein persönlicher Held des Tages.... Dank an dich!
@ Rest
Danke an euch alle... Ohne euch.... wär ich nicht weiter gekommen
THX FRAGE BEANTWORTET!
|
|
WormHole 
      
Beiträge: 145
|
Verfasst: Mi 18.05.05 20:51
So, soll ich das Topic mal eben wechseln??? Neue Frage zum (fast) selben Thema.
Nun wollte ich ein Parallelogramm auf die selbe Weise machen. Dazu habe ich es wie folgt gemacht:
Quelltext 1: 2: 3:
| x := 1/2*(sqr(c)+sqr(a)-sqr(b))/c; y := 1/2*sqrt((a+b+c)*(b+c-a)*(a+b-c)*(a+c-b))/c; Paintbox1.Canvas.Polygon([Point(100,150),Point(Round(a*cm),0), Point(Round(x*cm),Round(y*cm), Point(Round(x*cm+a),Round(y*cm)))]); //hier wollte ich noch einen Point dazu machen(Paralellogramm) |
Too many actual parameters... Was das heißt weiß ich wohl! Das diese Methode nur für Drei Punkte zu gebrauchen ist. Nur wie kann ich das selbe mit 4 Punkten machen?
|
|
Gosa
      
Beiträge: 112
|
Verfasst: Mi 18.05.05 21:06
Musst do wohl 4 Linien einzelnd zeichnen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| Procedure LinieVonBis(P1,P2 :TPoint); Begin With Paintbox1.Canvas do Begin MoveTo(P1.X , P1.Y); LineTo(P2.X , P2.Y); End; End; |
|
|
WormHole 
      
Beiträge: 145
|
Verfasst: Mi 18.05.05 21:22
Gosa hat folgendes geschrieben: | Musst do wohl 4 Linien einzelnd zeichnen |
Hatte ich mir schon fast gedacht!
Das ist nun auch geschafft....
greetz WormHole
|
|
|