Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   In einander drehende Rechtecke bzw. Quadrate (https://www.delphipraxis.net/52914-einander-drehende-rechtecke-bzw-quadrate.html)

daniel8520 6. Sep 2005 17:07


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!

Jelly 6. Sep 2005 17:41

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.

daniel8520 6. Sep 2005 17:45

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.

DGL-luke 6. Sep 2005 20:01

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:
//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;
könnte sein, dass ich damit ein rechteck zu viel oder eins zu wenig zeichne ;)

daniel8520 6. Sep 2005 20:41

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!

marabu 6. Sep 2005 20:42

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

DGL-luke 6. Sep 2005 20:56

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.

Stanlay Hanks 6. Sep 2005 21:15

Re: In einander drehende Rechtecke bzw. Quadrate
 
Zitat:

Zitat von daniel8520
das ein TRect nicht die Eigenschaft Height besitzt!

Es besitzt aber die Eigenschaften Top, Bottom, Left und Right.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:07 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