Kreisränder zeichnen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

SpionAtom

Betreff: Kreisränder zeichnen

BeitragDi, Jun 12, 2007 23:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe ein altes Problem/Programm gefunden, bei dem ich nie auf eine zufriedenstellende Lösung gekommen bin.
http://thomasdecker1.googlepages.com/kreise2.bb

Was soll dieses Programm leisten. Gezeichnet werden sollen mehrere Kreise. Aber die Teile von den Kreisen, die ineinander greifen sollen nicht gezeichnet werden. Man kommt also (glaube ich) nicht umhin, jeden Punkt einzeln zu überprüfen und zu zeichnen. Das ganze wäre nicht so schlimm, wenn es da nicht eine zweite Einschränkung gäbe. Die Punkte sollen in der richtigen Reihenfolge gezeichnet werden, so dass man jeden Punkt mit dem nächsten verbinden kann, und am Ende eine geschlossene Figur herausbekommt.

Das aktuelle Programm macht das irgendwie nur manchmal und wahrscheinlich gibts da eine clevere Methode als meine. Also "Geometriker" an die Front!
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

darth

BeitragMi, Jun 13, 2007 8:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Graphics 800,600,0,2
SetBuffer BackBuffer()

Type kreis
 Field r
 Field u
 Field ko[2]
 Field no
End Type

Type punkt
 Field ko[2]
 Field no
End Type

For x=0 To 10
 k.kreis=New kreis
 k\r=30
 k\ko[1]=100+x*20
 k\ko[2]=100
 k\u=36
 k\no=x
Next

 For k.kreis=Each kreis
  For x=0 To k\u
   If Not test(k\ko[1]+k\r*Cos(360/k\u*x),k\ko[2]+k\r*Sin(360/k\u*x),k\no)
    p.punkt=New punkt
     p\no=anzpt : anzpt=anzpt+1
     p\ko[1]=k\ko[1]+k\r*Cos(360./k\u*x)
     p\ko[2]=k\ko[2]+k\r*Sin(360./k\u*x)
   EndIf
  Next
 Next

While Not KeyHit(1)
 For p.punkt=Each punkt
  Plot p\ko[1],p\ko[2]
  If p\no<anzpt-1 Then
   p=After p
   tmpx=p\ko[1] : tmpy=p\ko[2]
   p=Before p
   Line p\ko[1],p\ko[2],tmpx,tmpy
  EndIf
 Next
 Flip 0 : Cls
Wend : End

Function test(x,y,no)
 For k.kreis=Each kreis
 If k\no<>no Then ;vergleich mit mittelpunkt koordinaten wirkungslos?!
  If Sqr((x-k\ko[1])^2+(y-k\ko[2])^2)<k\r Then
   tester=1
  EndIf
 EndIf
 Next
 Return tester
End Function


sry, konnte es noch nicht testen... bin in der schule Razz
hoffe es geht (und ist in etwa das gesuchte)

k\u ist der unterteilungsschritt (für einen "perfekten" kreis => 360)

[EDIT:]
ich habs verbessert. für die verbindung der punkte untereinander hab ich noch keine gescheite lösung gefunden :/ jetzt verbindet er einfach alle nachfolgenden punkte...
Diese Signatur ist leer.

SpionAtom

BeitragMi, Jun 13, 2007 13:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir hats nicht besonders viel angezeigt. Confused
Ein paar Pixel am oberen linken Rand vielleicht. Wenn ich das richtig sehe, verfolgst du den Ansatz, jeden Punkt daraufhin zu überprüfen, ob er sich in einem anderen Kreis befindet. Soweit sogut.
Doch garantiert das leider nicht, dass die Punkte auch in der richtigen Reihenfolge gezeichnet werden.

Mein Ansatz war der, jeden nächsten Schnittpunkt von Kreisen festzuhalten. Aber irgendwas lief noch nicht so toll.

Um nochmal zu verdeutlichen, was ich will, eine Skizze:
user posted image
(Man beachte nicht, dass es mehr Ovale als Kreise sind)

Ich möchte, dass die Kreisbögen rot, grün, blau, violett in dieser Reihenfolge gezeichnet werden. (oder umgekehrt, oder auch woanders angefangen). Ich möchte nicht, dass erst rot, dann blau - oder gar erst Teile von rot, dann Teile von blau, dann wieder rot und dann grün...

Sondern einfach nur nacheinander. Und zwar ausnahmslos, Kreise, die komplett innerhalb eines anderen Kreises sind, sollen auch nicht gezeichnet werden, und Kreise, die andere Kreise überhaupt nicht schneiden oder sich darin befinden, sollen ganz gezeichnet werden.
Wer was weiß, darfs mir sagen Very Happy
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080
 

Dreamora

BeitragMi, Jun 13, 2007 14:05
Antworten mit Zitat
Benutzer-Profile anzeigen
brehams algorithmen ansehen und selbst programmieren.

dafür gibts keine kurze oder simple lösung da darfst du dich wohl oder übel mit algorithmik für planarität und anderen dingen auseinander setzen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

darth

BeitragMi, Jun 13, 2007 16:35
Antworten mit Zitat
Benutzer-Profile anzeigen
... bei der alten version war das so, hatte einige dinge vergessen da :/
aber bei der neuen sollten "kreise" entstehen... (sind eben ineinander und werden dürftig von linien verbunden, sieht eher chaotisch als kreisisch aus...)
Diese Signatur ist leer.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group