DrawOval (aber nicht gefüllt?)

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

juse4pro

Betreff: DrawOval (aber nicht gefüllt?)

BeitragDo, Dez 24, 2009 19:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, wollte fragen, ob man DrawOval so manipulieren kann, dass der Kreis nicht gefüllt ist und man die Dicke des Randes z.B. mit SetLineWidth festlegen kann? DrawOval hat ja kein letzen Parameter, sowie in B3D Wink

Gruß, mortus (und ein frohes Fest)
Portfolio |LinkedIn |XING

Der Eisvogel

BeitragDo, Dez 24, 2009 21:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hatte mal eine Funktion geschrieben, die genauso gehandhabt wird wie in B3D, aber alle Features von BM beherbergt:
https://www.blitzforum.de/foru...drawovalex
BtbN hatte noch eine Möglichkeit für OGL dazu geschrieben.

MfG
Der Eisvogel
Und ein Frohes Fest
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

tedy

BeitragDo, Dez 24, 2009 21:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Oder einfach 2 Kreise zeichnen und einen kleiner machen ;=)
Naja
Nur wenns nicht umbedingt auf die Rechenleistung herabziehlt
01010100 01100101 01000100 01111001 00100000 00111010 01000100
 

BBPro2

BeitragDo, Dez 24, 2009 22:10
Antworten mit Zitat
Benutzer-Profile anzeigen
das funktioniert nicht tedy
dann entstehen zwischenräume an manchen stellen zwischen den kreisen
probiers aus Wink

Midimaster

BeitragFr, Dez 25, 2009 3:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier ist was, das einfach zu verstehen ist, und genauso schnell wie Eisvogels Code ist:

BlitzMax: [AUSKLAPPEN]
Function MeinOval(x%,y%,b%,h%,Filled%)
Local i%
If Filled=0 Then
B=B/2
H=H/2
Y=Y+h
x=X+b
For i=0 To 360
DrawLine x+Sin(i)*b,y+Cos(i)*h,x+Sin(i+1)*b,y+Cos(i+1)*h
Next
Else
DrawOval X,Y,B,H
EndIf
End Function


Hier ist was, das vielleicht auch noch zu verstehen ist, aber schon 3x so schnell wie Eisvogels Code:

BlitzMax: [AUSKLAPPEN]
Function MeinOval(x#,y#,b#,h#,Filled%)
Local i%, X1#, Y1#, X2#, Y2#
If Filled=0 Then
B=B/2
H=H/2
Y=Y+h
x=X+b
X2=(Sin(0)*b+0.5)
Y2=(Cos(0)*h+0.5)
Repeat
X1=X2
Y1=Y2
While (Int(X1)=Int(Sin(i+1)*b+0.5)) Or (Int(Y1)=Int(Cos(i+1)*h+0.5))
i=i+1
If I>360 Then Exit
Wend
X2=(Sin(i+2)*b+0.5)
Y2=(Cos(i+2)*h+0.5)
I=i+2
DrawLine x+X1,y+Y1,x+X2,y+Y2
Until I>360
Else
DrawOval X,Y,B,H
EndIf
End Function


Das Problem ist, dass LINE so lange dauert: 360 Linien dauern nun mal 5.5 msec.

Der Trick ist vorauszuberechnen, ob die nächste Linie nicht genau den gleichen X oder Y-Wert hätte, dann kann man sie gleich jetzt mitzeichnen.

Richtig ab geht die Routine bei kleinen oder sehr schmalen Ovalen.

Aber das geht noch schneller....na, wer schaffts?

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group