Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#1

Gedrehter Gradient im Rechteck

  Alt 13. Dez 2015, 07:29
Ich zweifle gerade an mir selbst. Ich möchte einfach nur einen linearen Farbverlauf in ein Rechteck zeichnen. So weit so einfach. Diesen will ich aber gerne in einem beliebigen Winkel zeichnen, und zwar so, dass die Farbe 0 und Farbe 1 immer irgendwo genau am Rand landen, der Verlauf aber das Rechteck genau ein mal ausfüllt. Ein Bild ist da weit aussagekräftiger als Text, daher bitte jetzt den Anhang ansehen. (Angegeben wird der Verlauf mittels zweier Punkte zwischen denen der Verlauf läuft, bei mir P0 und P1.)

(Ich warte so lange.)

Ok, am Bild sieht man, dass ich schon mal auf den Trick gestoßen bin, dass die Eckpunte um den Faktor Sqrt(2) weiter vom Zentrum entfernt sind als die Kantenmittelpunkte. Und für diese zwei Fälle (Drehung um Vielfache von 90° und Drehung um Vielfache von 45°) stimmt das Ergebnis auch. Leider aber für alles dazwischen nicht, wenn ich zwischen den Faktoren "1" und "Sqrt(2)" linear mit dem Winkel interpoliere. Dann laufen nämlich meine "Endkanten" des Verlaufs durch das Rechteck (ganz rechts im Bild gezeigt), und das sollen sie nicht.
In irgend einer Weise muss das mit der kleinsten umschließenden Ellipse zusammenhängen (daher kommt auch die Sqrt(2)), aber das in zwei Punkte in Abhängigkeit von Mittelpunkt, Breite, Höhe und Drehwinkel zu verpacken - da habe ich irgendwie eine Blockade. Auch Google half leider nur wenig, da viele offenbar nur die 90° oder 45° Fälle brauchen.

Für ein Quadrat allerdings funktioniert der gezeigte Weg schon! Aber das genügt leider nicht. Ich hoffe, dass hier jemand etwas Licht in mein Hirn bringen kann. Danke schon mal!

(Realisiert wird das ganze in C#, das sollte aber eher unerheblich sein. Wenn sich durch die Benutzung davon (also GDI+) einfachere Wege bieten als die P0 und P1 von Hand zu berechnen, wäre ich aber natürlich auch interessiert, weshalb ich das hier kurz erwähne.)
Miniaturansicht angehängter Grafiken
squares.png  
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium (13. Dez 2015 um 07:38 Uhr)
  Mit Zitat antworten Zitat