Autor Beitrag
WormHole
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 145



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Di 17.05.05 14:37 
Gar nicht :roll: . 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 145



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Di 17.05.05 16:06 
user profile iconWormHole 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 145



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 40

Win XP, WIN 2000, Win 98, Win 95, Win 3.11
D5 Stand /D7 enterp/2k5 pers.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Di 17.05.05 16:39 
sag ich doch :D, das war wieder sonn sekunden ding, als meiner fertig war, stand deiner auch schon da :wink:
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: 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.

user profile iconrjan: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 40

Win XP, WIN 2000, Win 98, Win 95, Win 3.11
D5 Stand /D7 enterp/2k5 pers.
BeitragVerfasst: Di 17.05.05 18:39 
ok kappiert .... ascii zeichnungen sind nicht mein lieblings bereich
WormHole Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 145



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Di 17.05.05 20:48 
sqrt ist die Quadratwurzel. Und sqr bedeutet "im Quadrat".

Beispiel:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 145



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 145



BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 112



BeitragVerfasst: Mi 18.05.05 21:06 
Musst do wohl 4 Linien einzelnd zeichnen:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 145



BeitragVerfasst: Mi 18.05.05 21:22 
user profile iconGosa hat folgendes geschrieben:
Musst do wohl 4 Linien einzelnd zeichnen


Hatte ich mir schon fast gedacht! ;)

Das ist nun auch geschafft....

greetz WormHole