Ellipse mit hilfe von Line ? (erledigt)
Übersicht

SilbersurferBetreff: Ellipse mit hilfe von Line ? (erledigt) |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Außerdem empfiehlt es sich immer, Setbuffer BackBuffer() zu verwenden ![]() |
||
Silbersurfer |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
regaa schrieb !
Zitat: erkleiner den radius, oder inkrementiert den winkel nicht sofort um 1° sondern 0,5 etc.
warum soll ich den Radius verkleinern ![]() Er soll ja mit der Maus bestimmt werden und einfach den zähler auf 0.5 setzten ![]() oder wenn der Radius wieder zu groß wird dann fehlen erneut Punkte Gibt es da nicht einen anderen weg ![]() |
||
-------------------------------------------------------
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke habs ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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 ![]() |
||
-------------------------------------------------------
XP 2000+ 512DDR Radeon 9800 XL 340GB HD Hompage : http://home.arcor.de/silbersurfer01/ Is Bob engine http://home.arcor.de/silbersur.../Isbob.zip |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group