Ellipse mit hilfe von Line ? (erledigt)

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Silbersurfer

Betreff: Ellipse mit hilfe von Line ? (erledigt)

BeitragDi, Feb 22, 2005 16:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo leute !

Habe da ein keines Problem mit der Ellipse
wenn ich eine Ellipse mit hilfe von sin/cos erstellle
die dann mit dem Plot befehl Zeichne entstehen lücken Exclamation

Okey also habe ich sie mit dem Line Befehl Gezeichnet
was auch funtz, nur dann ist der Kreis nicht sauber wie kann Ich das ändern Question

Hier mein Code
Code: [AUSKLAPPEN]
Graphics 800,600,0,2
t=0
muster=1
Repeat
 x=MouseX():y=MouseY()
   If MouseDown(1)=1
      Repeat      
         x2=MouseX():y2=MouseY()
         Cls
         ellipse x,y,x2-x, y2-y,muster,t         
         Flip
      Until MouseDown(1)=0
   EndIf
Until KeyHit(1)

Function ellipse(x_start,y_start,x_radius,y_radius,muster,t)
   Repeat      
      t=t+muster
      ;vorherige Cordinaten retten !
      altx#=startx:alty#=starty
      ;Cordinaten neu setzen !
      startx=x_start+Sin(t)*x_radius:starty=y_start+Cos(t)*y_radius
      ;die ersten Cordinaten holen !
      If altx=0 altx=startx:erstex=startx:If alty=0 alty=starty:erstey=starty
      
      Line  altx,alty,startx,starty
      ;schliessen der ersten und der letzten Cordinate !
      If t=>360+muster Line  erstex,erstey,startx,starty         
   Until t=>360+muster
End Function


wäre schön wenn da jemand helfen kann
-------------------------------------------------------
XP 2000+ 512DDR Radeon 9800 XL 340GB HD
Hompage : http://home.arcor.de/silbersurfer01/
Is Bob engine http://home.arcor.de/silbersur.../Isbob.zip
  • Zuletzt bearbeitet von Silbersurfer am Di, Feb 22, 2005 19:02, insgesamt einmal bearbeitet

regaa

BeitragDi, Feb 22, 2005 16:13
Antworten mit Zitat
Benutzer-Profile anzeigen
verkleiner den radius, oder inkrementiert den winkel nicht sofort um 1° sondern 0,5 etc.
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Spikespine

BeitragDi, Feb 22, 2005 16:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Außerdem empfiehlt es sich immer, Setbuffer BackBuffer() zu verwenden Wink
 

Silbersurfer

BeitragDi, Feb 22, 2005 17:07
Antworten mit Zitat
Benutzer-Profile anzeigen
regaa schrieb !
Zitat:
erkleiner den radius, oder inkrementiert den winkel nicht sofort um 1° sondern 0,5 etc.

warum soll ich den Radius verkleinern Question
Er soll ja mit der Maus bestimmt werden
und einfach den zähler auf 0.5 setzten Question Zeichnet er dann nicht auch viele auf den x,y Cords umsonst (Doppelt)
oder wenn der Radius wieder zu groß wird dann fehlen erneut Punkte
Gibt es da nicht einen anderen weg Question
-------------------------------------------------------
XP 2000+ 512DDR Radeon 9800 XL 340GB HD
Hompage : http://home.arcor.de/silbersurfer01/
Is Bob engine http://home.arcor.de/silbersur.../Isbob.zip
 

ke^kx

BeitragDi, Feb 22, 2005 17:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Du müsstest die Anzahl der Punkte ins Verhältnis mit dem Radius und der Krümmung setzen (wie weiß ich auch nicht^^)

Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM
 

Silbersurfer

BeitragDi, Feb 22, 2005 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke habs Idea

Tread kann geschlossen werden

cu Silbersurfer
-------------------------------------------------------
XP 2000+ 512DDR Radeon 9800 XL 340GB HD
Hompage : http://home.arcor.de/silbersurfer01/
Is Bob engine http://home.arcor.de/silbersur.../Isbob.zip

DivineDominion

BeitragFr, Feb 25, 2005 10:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Schön ist auch Bresenham! Habe Bresenhamalgorithmus für Linien und Kreise parat, Ellipsen leider nicht. Der bessert die Fehler aus, also die Lücken zwischendrin. Arbeitet ohne SIN und COS sogar Smile

TPoint ist bloß eine Klasse in BMax die ich erstellt habe. Gib stattdessen die Koordinaten direkt an, an denen der Punkt auftauchen soll.
Statt set_pixel dann WritePixelFast nehmen, nicht vergessen.
Hoffe der BMax code verwirrt nicht zu sehr Smile

Code: [AUSKLAPPEN]

Function bresenham_circle( p:TPoint, r:Int )
   
   Local x:Int, y:Int
   
   x = 0
   y = r
   
   Local d:Int, dx:Int, dxy:Int
   
   d = 1 - r
   dx = 3
   dxy = -2 * r + 5
   
   While y >= x
      
      set_pixel( TPoint.create( p.x + x, p.y + y ) )
      set_pixel( TPoint.create( p.x + y, p.y + x ) )
      set_pixel( TPoint.create( p.x + y, p.y - x ) )
      set_pixel( TPoint.create( p.x + x, p.y - y ) )
      set_pixel( TPoint.create( p.x - x, p.y - y ) )
      set_pixel( TPoint.create( p.x - y, p.y - x ) )
      set_pixel( TPoint.create( p.x - y, p.y + x ) )
      set_pixel( TPoint.create( p.x - x, p.y + y ) )
      
      If d < 0
         
         d :+ dx
         dx :+ 2
         dxy :+ 2
         x :+ 1
      
      Else
         
         d :+ dxy
         dx :+ 2
         dxy :+ 4
         x :+ 1
         y:- 1
         
      EndIf
      
   Wend
EndFunction
christian.tietze@gmail.com - https://christiantietze.de
macOS

Mr.Keks

BeitragFr, Feb 25, 2005 14:14
Antworten mit Zitat
Benutzer-Profile anzeigen
divis code, einmal nach bb konvertiert und einmal mit einer seeehr simplen variante, daraus eine elipse zu machen. den algo selbst könnte man bestimmt auch leetiger auf elipsen umstellen, habe aber gerade keine zeit für sowas.
Code: [AUSKLAPPEN]
Function bresenham_circle( sx,sy, r, rgb=$FFFFFF )
   Local x, y
   
   x = 0
   y = r
   
   Local d, dx, dxy
   
   d = 1 - r
   dx = 3
   dxy = -2 * r + 5
   
   While y >= x
       
      WritePixel( sx + x, sy + y, rgb )
      WritePixel( sx + y, sy + x, rgb )
      WritePixel( sx + y, sy - x, rgb )
      WritePixel( sx + x, sy - y, rgb )
      WritePixel( sx - x, sy - y, rgb )
      WritePixel( sx - y, sy - x, rgb )
      WritePixel( sx - y, sy + x, rgb )
      WritePixel( sx - x, sy + y, rgb )
       
      If d < 0
         
         d = d + dx
         dx = dx + 2
         dxy = dxy + 2
         x = x + 1
       
      Else
         
         d = d + dxy
         dx = dx + 2
         dxy = dxy + 4
         x = x + 1
         y = y - 1
         
      EndIf
       
   Wend
End Function

Function bresenham_elipse( sx,sy, rx, ry, rgb=$FFFFFF )
   Local x, y
   
   r = Abs(rx) + Abs(ry)

   x = 0
   y = r
   
   Local d, dx, dxy
   
   d = 1 - r
   dx = 3
   dxy = -2 * r + 5
   
   While y >= x And r
       
      WritePixel( sx + x * rx/r, sy + y * ry/r, rgb )
      WritePixel( sx + y * rx/r, sy + x * ry/r, rgb )
      WritePixel( sx + y * rx/r, sy - x * ry/r, rgb )
      WritePixel( sx + x * rx/r, sy - y * ry/r, rgb )
      WritePixel( sx - x * rx/r, sy - y * ry/r, rgb )
      WritePixel( sx - y * rx/r, sy - x * ry/r, rgb )
      WritePixel( sx - y * rx/r, sy + x * ry/r, rgb )
      WritePixel( sx - x * rx/r, sy + y * ry/r, rgb )
       
      If d < 0
         
         d = d + dx
         dx = dx + 2
         dxy = dxy + 2
         x = x + 1
       
      Else
         
         d = d + dxy
         dx = dx + 2
         dxy = dxy + 4
         x = x + 1
         y = y - 1
         
      EndIf
       
   Wend
End Function
MrKeks.net
 

Silbersurfer

BeitragDo, März 03, 2005 16:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Inarie schrieb !
Zitat:
en algo selbst könnte man bestimmt auch leetiger auf elipsen umstellen, habe aber gerade keine zeit für sowas.


der code ist wirklich gut, nur will mir nicht in den Kopf wiso
er bei manchen cords die Ellipse zeichnet und bei manchen nicht
blicke da nicht durch Crying or Very sad

habe mich da auch im Netz schlau gemacht, nur ne richtige hilfe war da nicht.

so wie Ich den Bresenham! algo verstanden habe sucht er die annäherung
in x/y von p1 zu p2 in aufsteigender form oder Question
-------------------------------------------------------
XP 2000+ 512DDR Radeon 9800 XL 340GB HD
Hompage : http://home.arcor.de/silbersurfer01/
Is Bob engine http://home.arcor.de/silbersur.../Isbob.zip

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group