Du bist nicht angemeldet.

Werbeanzeige

1

14.11.2011, 14:04

Spirale erzeugen

Hi,

ich versuche gerade, eine ganz normale Spirale als 2D-Objekt zu erzeugen. Mein erster Ansatz sieht dabei so aus, dass der Wert für den Radius kontinuierlich verkleinert wird, während der Wert für den Winkel Theta in dessen Abständen eine neue Position berechnet wird, mit gleicher Proportion vergrößert wird. Das führt jetzt zwar dazu, dass die Steigung innerhalb der Spirale immer gleich ist, sprich dass die Abstände zwischen den Linien konstant sind, leider hat das aber auch zur Folge, dass die Linien nach innen sichtbar werden. Sprich im Inneren ist der Linienverlauf recht eckig.

Also muss ein anderer Ansatz her, um so weiter ich in der spirale nach innen komme, um so kleiner müssen die Winkel/Schritte werden, nach denen ich einen neuen Stützpunkt berechne. Allerdings: wie bekomme ich es dann hin, dass die Steigung der Spirale Konstant bleibt? Wie ermittele ich aus dem Winkel einen Radius?

Sacaldur

Community-Fossil

Beiträge: 2 326

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

2

14.11.2011, 14:16

dieses Problem wird man immer haben, wenn man kleine Kreise ohne Anti-Aliasing
ansonsten fällt mir auf den ersten Blick kein Fehler bei deinem Gedankengang auf
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

dot

Supermoderator

Beiträge: 9 833

Wohnort: Graz

  • Private Nachricht senden

3

14.11.2011, 14:21

Allerdings: wie bekomme ich es dann hin, dass die Steigung der Spirale Konstant bleibt?

Meinst du sowas!?

4

14.11.2011, 14:40

Allerdings: wie bekomme ich es dann hin, dass die Steigung der Spirale Konstant bleibt?

Meinst du sowas!?


Ähm nein, das ist eigentlich das Negativbeispiel, das ich nicht haben möchte (OK, der Abstand soll gleich bleiben, nicht die Steigung).

5

14.11.2011, 14:49

OK, vielleicht mit einem Bild:


(Link)


So soll die Spirale im Prinzip aussehen, nur stört es mich, dass sie innen so eckig wird. Ursache: ich Erzeuge sie von außen nach innen, lasse dabei den Radius kontinuierlich kleiner werden und vergrößere den Winkel, nach dem ein neuer Stützpunkt berechnet wird eben so kontinuierlich.

Besser wäre es, den Radius nichtlinear kleiner werden zu lassen, so dass der Winkel entweder immer gleich bleiben kann oder aber nicht so stark wächst. Was gegen das Gleichbleiben spricht: wenn der äußere Radius mit beispielsweise 100 Segmenten relativ glatt aussieht, so kann der innere Radius mit deutlich weniger Segmenten ebenso glatt werden. Nur woran mache ich diese nichtlineare Änderung des Radius fest?

dot

Supermoderator

Beiträge: 9 833

Wohnort: Graz

  • Private Nachricht senden

6

14.11.2011, 14:59

Also willst du die Schrittweite für den Winkel eben genau nicht konstant sondern adaptiv haben. Ich würd die Schrittweite §d\varphi§ so anpassen, dass die lokale Bogenlänge §r \cdot d\varphi§ konstant bleibt.

Sacaldur

Community-Fossil

Beiträge: 2 326

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

7

14.11.2011, 15:02

du musst nicht zwingend mehr segmente berechnen, du musst sie nur richtig zeichnen
schau dir dazu einfach mal die Bézierkurve an
für jedes Segmentende müsstest du nur noch einen passenden weiteren Punkt finden, um das Segment richtig zeichnen zu können

(und auch die äußeren Segmente sind teilweise zu erkennen, aber nur nicht so einfach)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

8

14.11.2011, 15:05

Also willst du die Schrittweite für den Winkel eben genau nicht konstant sondern adaptiv haben. Ich würd die Schrittweite §d\varphi§ so anpassen, dass die lokale Bogenlänge §r \cdot d\varphi§ konstant bleibt.


Ähm nein gerade anders herum (vielleicht sollte ich morgen noch mal Posten ,heute kann ich mich irgend wie nicht verständlich ausdrücken).

Die Schrittweite für den Winkel ist derzeit nicht konstant, aber die Bogenlängen sind es. Das führt ja gerade dazu, dass die Bogenlänge innen dann viel zu groß für den dort viel zu kleinen Kreisumfang ist.

Allerdings soll auch der Winkel nicht konstant werden, da ich dann innen genau so viele Segmente habe, wie am großen Radius außen - was reine Verschwendung ist, da ein kleiner Kreis mit weniger Segm,enten genau so glatt aussehen kann, wie ein großer mit vielen. Es sollens also sowohl Winkel als auch die bogenlänge abhängig vom Radius verändert werden.

dot

Supermoderator

Beiträge: 9 833

Wohnort: Graz

  • Private Nachricht senden

9

14.11.2011, 15:15

Ah ok, stimmt. Naja, dann pass die Schrittweite für den Radius stattdessen vielleicht an die lokale Krümmung 1/r an.

Sacaldur

Community-Fossil

Beiträge: 2 326

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

10

14.11.2011, 15:34

habe gerade die Wikipediaseite zur archimedischen Spirale gefunden, welche wohl eher das Ziel ist

wenn die Segmente richtig gezeichnet werden, spielt deren Länge keine größere Rolle
einen Kreis kann man auch mit Hilfe von 4 Segmenten Zeichnen, ohne dass es ein Viereck wird
(eventuell geht dies auch mit weniger, allerdings bin ich mir dabei nicht ganz sicher)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Werbeanzeige