Durchgehende Ellipse
Übersicht

totonak5Betreff: Durchgehende Ellipse |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Ich habe da jetzt schon einige zeit herumprobiert, mit den verschiedensten methoden, aber es kommt nichts dabei heraus! Nur, wenn in folgendem code der rote punkt links oberhalb von dem des grünen ist, wird eine durchgehende ellipse gezeichnet, sonst nur punkte! wie kann ich das ändern? Code: [AUSKLAPPEN] Graphics 640,480
SetBuffer BackBuffer() .Neu Cls SeedRnd MilliSecs() XV = 0 : YV = 0 X = Rand(640) Y = Rand(480) EndeX = Rand(640) EndeY = Rand(480) T# = ATan2((EndeY - Y), (EndeX - X)) Color 255,00,0 Rect X-5,Y-5,10,10 Color 0,255,0 Rect EndeX-5,EndeY-5,10,10 Color 255,255,255 linieZ = CreateImage(200,200) Repeat If KeyDown(203) Then Goto Neu t# = t# + 2 YV = Y XV = X Y = Y + Sin(t#) * 48 X = X + Cos(t#) * 48 SetBuffer ImageBuffer(linieZ) Cls Line 0,0,X-XV,Y-YV SetBuffer BackBuffer() DrawImage LinieZ,XV,YV Flip Until KeyHit(1) Danke im voraus! PS: Dass die Ellipse den grünen Punkt nicht schneidet ist absicht! |
||
Just for Fun!
Jesus loves U! |
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist vielleicht nicht die sauberste Methode, aber prüfe doch einfach, welcher deiner Punkte der obere ist, und tausche ihn gegebenenfalls. ![]() |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo totonak, der Grund für die gepunktete Linie ist das du die Linie über das Image auf dem Bildschirm bringst. Wenn also die Linie negative Werte hat, dann zeichnest du aus dem Imagebereich hinaus und nur der Startpunkt bleibt in der linken oberen Ecke des Images. Das einfangen der Linie geht also schief! Nimm das Image-getue weg und zeichne auf direktem Wege auf dem Bildschirm oder tausche die Start-End-Punkte wenn sie negative Werte haben sollten. Die leztere Methode wird allerdings nicht ganz schön zu proggen sein, da dann auch die Darstellung bedacht werden sollte. Eine Möglichkeit währe das Image doppelt so breit und doppelt so hoch zu machen um alle Bewegungsbereiche einfangen zu können, du hast dann ein Mittelpunkt von wo aus die Linie startet. Muß es denn über das Image sein?
Benutze bitte nie wieder den Goto -Befehl. Der ist böse. ![]() Eine Nebensächlichkeit: Rect X-5,Y-5,10,10 zeichnet nicht in der 'Mitte'. Dieser Rect ist 10 Pixel breit und hoch aber Startposition ist für X und Y jeweils -5. Also muß um den 'Mittelpunkt' darstellen zu können der Rect 11 Pixel breit und hoch sein! Also: Rect X-5,Y-5,11,11 Erstelle nicht immer neue Images. Benutze auch mal wieder FreeImage um den Speicher wieder mal zu entlasten. Hier mal ein Beispielcode mit Images:Code: [AUSKLAPPEN] Graphics 640,480,0,2
SetBuffer BackBuffer() Global X%=0 ;X-Startposition Global Y%=0 ;Y-Startposition Global EndeX%=0 ;X-Endposition Global EndeY%=0 ;Y-Endposition Global T#=0 ;Atan2-Winkel linieZ=CreateImage(401,401) SeedRnd MilliSecs() FLinieZ ;Hauptschleife Repeat If KeyDown(203) Then FLinieZ T=T+2 YV=Y XV=X Y=Y+Sin(T)*48 X=X+Cos(T)*48 SetBuffer ImageBuffer(linieZ) Cls Line 200,200,200+X-XV,200+Y-YV SetBuffer BackBuffer() DrawImage LinieZ,XV-200,YV-200 Flip Until KeyHit(1) FreeImage linieZ End ;Neue LinieZ erstellen Function FLinieZ() Cls XV=0 YV=0 X=Rand(640) Y=Rand(480) EndeX=Rand(640) EndeY=Rand(480) T=ATan2((EndeY-Y),(EndeX-X)) Color 255,00,0 Rect X-5,Y-5,11,11 Color 0,255,0 Rect EndeX-5,EndeY-5,11,11 Color 255,255,255 End Function |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hier nochmal ein Beispiel... Vielleicht hilft es dir ja. Ich weiß nicht warum die andere Läsung so langsam ist, die hier ist aber sehr schnell. Mit Cursor hoch/runter kannst du den Radius verändern.Code: [AUSKLAPPEN] Graphics 640,480,0,2
SetBuffer BackBuffer() Global xa%=0 ;X-Anfangsposition Global ya%=0 ;Y-Anfangsposition Global xe%=0 ;X-Endposition Global ye%=0 ;Y-Endposition Global wk#=0 ;Winkel Global ra%=1000 ;Radius SeedRnd MilliSecs() While Not KeyHit(1) If KeyDown(200) Then ra=ra+10 If KeyDown(208) Then ra=ra-10:If ra<0 Then ra=0 If KeyDown(203) Then Cls xa=Rand(640):ya=Rand(480) xe=Rand(640):ye=Rand(480) wk=ATan2(ye-ya,xe-xa) EndIf ;Oval zeichnen Color 96,96,96 Oval xa-ra+Cos(wk+90)*ra,ya-ra+Sin(wk+90)*ra,2*ra,2*ra,0 ;Start-End-Punkte zeichnen Color 255,0,0:Oval xa-6,ya-6,13,13 Color 0,255,0:Oval xe-6,ye-6,13,13 ;Pfeil zeichnen Color 255,255,255 Line xa,ya,xa+Cos(wk)*32,ya+Sin(wk)*32 Line xa+Cos(wk)*32,ya+Sin(wk)*32,xa+Cos(wk-20)*24,ya+Sin(wk-20)*24 Line xa+Cos(wk)*32,ya+Sin(wk)*32,xa+Cos(wk+20)*24,ya+Sin(wk+20)*24 ;Textausgabe Text 0,0,"Radius :"+ra Text 0,16,"Winkel :"+Int(wk) Flip Cls Wend End |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group