Seltsames Verhalten von Line und Rect bei Längenänderung
Übersicht

![]() |
FlushBetreff: Seltsames Verhalten von Line und Rect bei Längenänderung |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo zusammen,
ich habe in meinem kleinen Programm animierte 3 Linien mit Line gezeichnet. Das funktioniert sehr gut. Schließlich wollte ich Line durch Rect ersetzen, da nur horizontale Linien gezeichnet werden und Rect 1500 mal schneller als Line ist. Das funktioniert aber nicht. Das Rechteck müsste sich doch bei in der Länge genauso (identisch) ändern wie die Linien die ich mit Line gezeichnet habe. Auf der X und Y Achse funktioniert das auch aber die Längenänderung ist komplett falsch. Die Längenänderung von Rect müsste doch identisch mit der von Line sein ![]() Ich habe hier mal ein lauffähiges Beispiel extrahiert: BlitzBasic: [AUSKLAPPEN]
Könnt Ihr mir sagen wo da der Hund begraben liegt un vor allem wie ich das richtig mache? Vielen Dank für Eure Mühe und Hilfe bei der Hitze ![]() Viele Grüße, Flush |
||
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei rect![]() Das ist in deinem Fall Zeile 60 Code: [AUSKLAPPEN] Local X = 300 + PosX + ZaehlerTestLine
Du rechnest da zusätzlich die Position mit drauf, die sollte auf alle Fälle weggelassen werden. Die Länge, welche die Linie hat, kannst du auch leicht errechnen: Code: [AUSKLAPPEN] Line PosX + CosinusWerte[(iAngle + ZaehlerTestLine)Mod 359], PosY - SinusWerte[(iAngle + ZaehlerTestLine)Mod 359], X, Y
Das ist nämlich die Differenz der beiden X-Koordinaten, also: X - (PosX + CosinusWerte[(iAngle + ZaehlerTestLine)Mod 359]) |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
- Zuletzt bearbeitet von SpionAtom am Do, Jul 19, 2018 19:23, insgesamt 3-mal bearbeitet
![]() |
Flush |
![]() Antworten mit Zitat ![]() |
---|---|---|
@SpionAtom
Zitat: Bei rect gibt man als dritte und vierte Parameter die Länge und Höhe des Rechtecks an.
Das ist in deinem Fall Zeile 60 Klar, aber wenn ich die PosX weglasse klapps auch nicht. Danke für Deine schnelle Antwort! Viele Grüße, Flush |
||
- Zuletzt bearbeitet von Flush am Do, Jul 19, 2018 22:08, insgesamt einmal bearbeitet
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hatte meinen Beitrag noch editiert, du berechnest unterschiedliche Längen.
Im Falle der Linie hat die Linie eine Länge von: Code: [AUSKLAPPEN] Local X = 300 + PosX + ZaehlerTestLine Line PosX + CosinusWerte[(iAngle + ZaehlerTestLine)Mod 359], PosY - SinusWerte[(iAngle + ZaehlerTestLine)Mod 359], X, Y X - (PosX + CosinusWerte[(iAngle + ZaehlerTestLine)Mod 359]) Setzt man für X den berechneten Wert ein, dann steht da folgendes: (300 + PosX + ZaehlerTestLine) - ((PosX + CosinusWerte[(iAngle + ZaehlerTestLine)Mod 359])) = 300 + ZaehlerTestLine - CosinusWerte[(iAngle + ZaehlerTestLine)Mod 359]) Die Länge beim Rechteck ist: Code: [AUSKLAPPEN] Local X = 300 + ZaehlerTestRect
Da wird der Cosinuswert gar nicht mit einberechnet, da ist der Hund begraben. |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
![]() |
Flush |
![]() Antworten mit Zitat ![]() |
---|---|---|
@SpionAtom
Tut mir leid dass ich mich erst jetzt melden kann. Vielen Dank für Deine Antwort. Ich hab den Code entsprechend geändert und es funktioniert. Nun versuche ich die Sache zu verstehen und hab noch eine Frage. Es ist klar dass ich die Länge der Linie durch Länge = Ende - Anfang ==> Länge = X - (PosX + CosinusWerte[(iAngle + ZaehlerTestLine)Mod 359]) berechnen kann. Das X bei Line ist eindeutig als Local X = 300 + PosX + ZaehlerTestLine initialisiert. Das PosX bei Line ist eindeutig als PosX = 150 initialisiert. Also steht im X beim Aufruf des Line Objekts X = 300 + 150 + ZaehlerTestLine. BlitzBasic: [AUSKLAPPEN]
Beim Aufruf des Line Objekts wird durch X die Längenänderung erreicht. Das X bei Rect ist eindeutig als Local X = 300 + PosX + ZaehlerTestRect initialisiert also identisch zu Line. Das PosX bei Rect ist eindeutig als PosX = 150 initialisiert identisch zu Line. Also steht im X beim Aufruf des Rect Objekts X = 300 + 150 + ZaehlerTestRect. BlitzBasic: [AUSKLAPPEN]
Beim Aufruf des Rect Objekts sollte durch X die Längenänderung erreicht werden dentisch zu Line. Deine Lösung: BlitzBasic: [AUSKLAPPEN]
ist völlig richtig. Aber warum müssen bei 2 völlig identischen Initialisierungen 2 unterschiedliche Angaben in den X Werten gemacht werden. X ist doch immer 300 + PosX + ZaehlerTestLine wobei Pos X = 150 ist. Werden die X Angaben der Objekte (Rect & Line) irgendwie anders behandelt? Bei Line ist der X-Wert eine Positionsangabe bei Rect eine Größenangabe der Breite?! Zitat: Da wird der Cosinuswert gar nicht mit einberechnet, da ist der Hund begraben.
Der Cosinuswert wir doch beim Line Objekt nur beim X für den Startpunkt mit einberechnet, weshalb brauche ich Ihn dann beim Rect Objekt im Endpunkt ![]() Ich hab versucht mich so klar und deutlich auszudricken wie es geht, ich hoffe Du/ Ihr versteht wo ich hängen bleibe ![]() ![]() Viele Grüße, Flush |
||
- Zuletzt bearbeitet von Flush am So, Jul 22, 2018 18:44, insgesamt einmal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ein Rect hat kein Endpunkt.
Line ![]() Rect ![]() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Flush |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Xeres
Hmmm dann war mein Problem dass ich dachte die X_Angaben bei Line und Rect seien identisch! Danke für Deine Hilfe. Viele Grüße, Flush |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group