![]() |
In einander drehende Rechtecke bzw. Quadrate
Hallo Leute,
ich verzweifel grad an meinen Info-Hausaufgaben! Allerdings nicht von der Informatik her, sondern eher von seiten der Mathematik :gruebel: Wie der Titel schon sagt, sollen wir Rechtecke in einer PaintBox produzieren, wobei das erste die Ränder der PaintBox darstellt. Die obere linke Ecke des 2. Rechtecks bzw. Quadrats, ist dann um bspw. 10 px in positiver Y-Richtung verschoben. Die untere linke Ecke des 2. Rechtecks liegt auf der unteren Seite des ersten Rechtecks, aber um n=10 px in X-Richtung verschoben.....usw. (Falls ihr mich nicht versteht, muss ich nen pic posten) Mein Problem liegt, wie ihr euch denken könnt, an der Berechnung der Eckpunkte. Ich hab keinen Ansatz. Falls hier irgendwelche Schlagwörter für mich habt, wäre ich euch sehr dankbar! Danke im Vorraus! |
Re: In einander drehende Rechtecke bzw. Quadrate
Wo ist denn das Problem. Du schreibst die Ecke liegt um 10 Pixel in positiver y-Rictung verschoben... Also hat die neue Ecke E1neu die Koordinaten E1alt(x,y+10).. usw. Aus den 4 Ecken zeichnest du dein Rechteck und fertig.
|
Re: In einander drehende Rechtecke bzw. Quadrate
Mein Fehler!
Ich hätte dazu sagen sollen, dass es nicht nur 2 Rechtecke sein sollen, sondern mehrere (so viele, wie halt rein passen). Das erste (was den Rand darstellt), ist genau wie das 2. kein Problem, aber die folgenden. |
Re: In einander drehende Rechtecke bzw. Quadrate
willst du sie denn ineinander verschachteln?
wenn ja, dann geht das so(das würde dir aber nur ein rechteck mit linien darin bringen):
Delphi-Quellcode:
könnte sein, dass ich damit ein rechteck zu viel oder eins zu wenig zeichne ;)
//rect = TRect mit standardwerten
//thisrect = TRect; //paintbox = TPaintBox; //offset = integer mit abstand der rechtecke rect.left := 0; rect.right:=paintbox.width; rect.bottom:=paintbox.hight; rect.top:=0; for i:= 0 to (paintbox.height div rect.height) //so oft wird gezeichnet. begin thisrect.left:=rect.left; thisrect.right:=rect.right; thisrect.top:=rect.top + offset; thisrect.bottom:= thisrect.top + rect.height; paintbox.rectangle(thisrect); end; |
Re: In einander drehende Rechtecke bzw. Quadrate
Leider passiert bei deinem Quelltext gar nichts! Ich hab versucht alle Fehler raus zu basteln, aber das Problem ist, das ein TRect nicht die Eigenschaft Height besitzt!
|
Re: In einander drehende Rechtecke bzw. Quadrate
Hi Daniel,
versuche dich mal an deinen letzten Kampf mit der Vektorrechnung zu erinnern. Du nimmst einfach dein Ausgangsrechteck ABCD mit der Seite a = AB und der Seite b = BC. A' erhältst du durch das Ansetzen eines Vektors v in A mit der Länge |v| = 10 (pixel als Einheit in deinem Koordinatensystem) und der Richtung a --> B. Nach diesem initialen Schritt kannst du B' durch Vektoraddition u = n*v + w erhalten, wobei |n*v| die Länge a ist und der Vektor w die Länge von v hat, aber seine Richtung um 90 Grad Celsius von v abweicht. |u| kannst du dann ins Verhältnis setzen zur Länge von Seite a und durch Dreisatzrechnung erhätst du die Länge des Vektors u', der dir dann Punkt C' liefert. Dann drehst du u' um weitere 90 Grad und mit der Länge von u und der neuen Richtung stösst du auf Punkt D' - fertig. Jetzt beginnt das Spiel von neuem nach gleichem Muster. Vergiss nicht ein Endekriterium festzulegen, |u| > 10 könnte sinnvoll sein. Viel Spaß bei den Hausaufgaben wünscht dir der marabu |
Re: In einander drehende Rechtecke bzw. Quadrate
ja, du hast recht, man sollte da einen konstanten wert wert einfügen...
Aber ich seh die topicüberschrift jetzt erst.... :roll: es geht ja ums drehen. Da wirst du wohl versuchen müssen, marabus Post zu verstehen. |
Re: In einander drehende Rechtecke bzw. Quadrate
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz