Kreis mit Writepixel(fast)
Übersicht

![]() |
The_NiciBetreff: Kreis mit Writepixel(fast) |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
da "Oval()" zu langsam ist und nicht unter Lockbuffer() funktioniert, zeichne ich selber mit WritepixelFast Kreise. Nämlich so: Code: [AUSKLAPPEN] For pw=0 To 360 For pl=-pinselradius To pinselradius WritePixelFast(Sin(pw)*(pinselradius+pl)+mx-360,Cos(pw)*(pinselradius+pl)+my,pixel) Next Next Nun, vergrössert man nun den Pinselradius gleicht der Kreis mehr einem Sieb. Wie sollte ich den Kreis berechnen? |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du kannst für den Winkel eine Float nehmen und abhängig vom gewählten Radius die Schritte kleiner werden lassen, also anstatt 1° 0.1° oder 0.001°.
Ein wenig tüfteln tut da not um 'gute' Werte zu finden. Generell kannst Du dich am Kreisumfang orientieren. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das problem ist, dass nach einer bestimmten Grösse es zu lange dauert, um den Kreis zu zeichnen.
Gibt es eine andere Lösung mit Pi oder etwas ähnlichem? |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mir fällt auf anhieb nichts ein, ausser vielleicht einem vorberechneten und bei bedarf gescalten Kreis-Image. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gut, danke trotzdem.
Muss ich wohl machen. ![]() |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eine eigene Oval-Routine wie von the_nici, die noch dazu bei größeren Kreisen wie ein Sieb ausschaut bzw ständiges Skalieren eines Kreis-Images soll schneller sein als Oval selbst? ![]() mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oval ist für ein Malprogramm ungeeignet.
Dazu kann ich mit Copyimage die Bilder in ein Array speichern und dann scalen, und sie dann aufrufen. |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Eine andere Möglichkeit ist einen besseren Algo zu nehmen. Da empfehle ich Google nach den Bresenham Algorithmen zu befragen die für solche Dinge eine der wohl effizientesten Lösungen anbieten. | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
ähm, ja.. also die Sache mit dem Scalen hab ich wohl grob misverstanden, also vergesst den Teil meines Codes. Aber den Vergleich von Oval und "oval2" halte ich für aussagekräftig:
(Wer es nicht ausführen will, warum auch immer: Oval erzeugt außerdem die schönsten Kreise und kann auch Ovale machen) Code: [AUSKLAPPEN] Graphics 800,600,0,2
SetBuffer BackBuffer() DebugLog "Oval-Test" time=MilliSecs() For i=1 To 1000 Oval 10,10,50,50 Next Flip 0 DebugLog "Durchschnitt: "+((MilliSecs()-time)/1000.0) DebugLog "WritePixelFast-Test" Function oval2(x,y,d) For pw=0 To 360 For pl=-d To d WritePixelFast(Sin(pw)*(d+pl)+x,Cos(pw)*(d+pl)+y,123456) Next Next End Function time=MilliSecs() LockBuffer For i=1 To 1000 oval2(60,60,25) Next UnlockBuffer Flip 0 DebugLog "Durchschnitt: "+((MilliSecs()-time)/1000.0) DebugLog "Scale-Test" kreis=CreateImage(20,20) SetBuffer ImageBuffer(kreis) Oval 0,0,20,20 SetBuffer BackBuffer() time=MilliSecs() For i=1 To 1000 ResizeImage kreis,50,50 DrawImage kreis,10,10 Next Flip 0 DebugLog "Durchschnitt: "+((MilliSecs()-time)/1000.0) WaitKey() End ;Mein Ergebnis: ;Oval-Test ;Durchschnitt: 0.727 ;WritePixelFast-Test ;Durchschnitt: 5.305 ;Scale-Test ;Durchschnitt: 8.64 |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
"Oval" funktioniert hingegen zur Writepixelfast-Variante nicht unter Lockbuffer, und du kannst mit deinen Speedtests nix drann rütteln. Ist so.
@Dreamora: werd ich heute mal anschauen, der Wikipediaartikel ist schön ausführlich. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group