Ungenau: Sin,Cos im Array

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Michi1988

Betreff: Ungenau: Sin,Cos im Array

BeitragSa, Jun 12, 2004 23:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Tag, hab ma was gemacht und irgendwie habe ich was volkommen
falsch gemacht oder es entsteht wirklich eine leichte ungenauigkeit
beim speichern. Beim ausführen wird jeder sehen was schei*e is.

Code: [AUSKLAPPEN]

;By Michi1988 aliaZ <jab>@(mh)
Graphics 800,600,16,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()
AppTitle "<jab>@(mh)s  Shadowexample"

Dim ausdehnung#(360)
Dim awinkel#(360,1)

For steps#=0 To 360 Step 0.5
   awinkel#(steps,0)=Cos(steps#)
   awinkel#(steps,1)=Sin(steps#)
Next

For steps#=0 To 360 Step 0.5
   ausdehnung#(steps)=1
Next

   Repeat
      start=MilliSecs()
      
      Color 255,0,255
      Rect 600,10,200,200
      Oval 100,100,100,100
      Line 0,0,800,600
      Line 1,0,801,600   
      
      mx=400+awinkel(flips,0)*350
      my=300+awinkel(flips,1)*250
      
      For steps=1 To 500
         For winkel#=1 To 360 Step 0.5
            If Ausdehnung(winkel#)=1 Then
               rgb=ReadPixelFast( MX+awinkel(winkel#,0)*steps,MY+awinkel(winkel#,1)*steps )
               If (rgb And $FF0000)/$10000<>255 And (rgb And $FF00)/$100<>255 And (rgb And $FF)=0 Then
                  Color 255-steps/2,255-steps/2,0
                  
                  If 255-steps/2<=0 Then ausdehnung(winkel*2)=0
                  If MX+awinkel#(winkel#,0)*steps<=000 Then ausdehnung(winkel)=0
                  If MX+awinkel#(winkel#,0)*steps>=800 Then ausdehnung(winkel)=0
                  If MY+awinkel#(winkel#,1)*steps<=000 Then ausdehnung(winkel)=0
                  If MY+awinkel#(winkel#,1)*steps>=600 Then ausdehnung(winkel)=0
                  
                  ;ÜÜÜÜÜÜÜÜÜÜÜÜ
                  Plot MX+awinkel#(winkel#,0)*steps,MY+awinkel#(winkel#,1)*steps
                  Else
                  Ausdehnung(Winkel#)=0
               End If
            End If
         Next
      Next
      
      flips=(flips+2) Mod 360
      
      For steps=1 To 360
         ausdehnung(steps)=1
      Next
      Color 255,255,255
      Text 400,300,"Time to render scene: "+fps+" milliseconds!"
         
      Flip
      ende=MilliSecs()
      fps=ende-start
   Cls
Until KeyHit(1)
                        


Habe es öfter mit writepixelfast oder writepixel gemacht, um die
Geschw, zu steigern, das hat jedoch nicht geklappt.

Habe bei ;ÜÜÜÜÜÜ nur anstatt das Plot das eingefügt:
Code: [AUSKLAPPEN]

                  rgb2=(255-steps/2)*$10000 + (255-steps/2)*$100 + 1
                  WritePixelFast MX+awinkel#(winkel#,0)*steps,MY+awinkel#(winkel#,1)*steps,rgb2


dann tritt aber ein ziemlich großer Fehler auf.
Könnt ihr mir Helfen?

Michi
 

Apocalyptic

BeitragSo, Jun 13, 2004 13:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Also das mit dem writepixelfast ist kein Problem:

Code: [AUSKLAPPEN]
;By Michi1988 aliaZ <jab>@(mh)
Graphics 800,600,16,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()
AppTitle "<jab>@(mh)s Shadowexample"

Dim ausdehnung#(360)
Dim awinkel#(360,1)

For steps#=0 To 360 Step 0.5
awinkel#(steps,0)=Cos(steps#)
awinkel#(steps,1)=Sin(steps#)
Next

For steps#=0 To 360 Step 0.5
ausdehnung#(steps)=1
Next

Repeat
start=MilliSecs()

Color 255,0,255
Rect 600,10,200,200
Oval 100,100,100,100
Line 0,0,800,600
Line 1,0,801,600

mx=400+awinkel(flips,0)*350
my=300+awinkel(flips,1)*250

LockBuffer

For steps=1 To 500
For winkel#=1 To 360 Step 0.5
If Ausdehnung(winkel#)=1 Then
rgb=ReadPixelFast( MX+awinkel(winkel#,0)*steps,MY+awinkel(winkel#,1)*steps )
If (rgb And $FF0000)/$10000<>255 And (rgb And $FF00)/$100<>255 And (rgb And $FF)=0 Then
If 255-steps/2<=0 Then ausdehnung(winkel*2)=0
If MX+awinkel#(winkel#,0)*steps<=000 Then ausdehnung(winkel)=0
If MX+awinkel#(winkel#,0)*steps>=800 Then ausdehnung(winkel)=0
If MY+awinkel#(winkel#,1)*steps<=000 Then ausdehnung(winkel)=0
If MY+awinkel#(winkel#,1)*steps>=600 Then ausdehnung(winkel)=0

;ÜÜÜÜÜÜÜÜÜÜÜÜ

WritePixelFast MX+awinkel#(winkel#,0)*steps,MY+awinkel#(winkel#,1)*steps,(255-steps/2) Shl 16 + (255-steps/2) Shl 8
Else
Ausdehnung(Winkel#)=0
End If
End If
Next
Next

UnlockBuffer

flips=(flips+2) Mod 360

For steps=1 To 360
ausdehnung(steps)=1
Next
Color 255,255,255
Text 400,300,"Time to render scene: "+fps+" milliseconds!"

Flip
ende=MilliSecs()
fps=ende-start
Cls
Until KeyHit(1)


und dein problem mit den steps: Array(3.5)=Array(4)... Ich denke, du verstehst was ich meine Wink

Um auch Kommazahlen verwenden zu können mach dein array größer, also z.B. Dim Array(359*2) und nimm die position auch mal 2

[Edit]
Code: [AUSKLAPPEN]
;By Michi1988 aliaZ <jab>@(mh)
Graphics 800,600,16,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()
AppTitle "<jab>@(mh)s Shadowexample"

Const stp=2

Dim ausdehnung#(360*stp-1)
Dim awinkel#(360*stp-1,1)

For steps#=0 To 360*stp-1
awinkel#(steps,0)=Cos(steps#/stp)
awinkel#(steps,1)=Sin(steps#/stp)
Next

For steps#=0 To 360*stp-1
ausdehnung#(steps)=1
Next

Repeat
start=MilliSecs()

Color 255,0,255
Rect 600,10,200,200
Oval 100,100,100,100
Line 0,0,800,600
Line 1,0,801,600

mx=400+awinkel(flips,0)*350
my=300+awinkel(flips,1)*250

LockBuffer

WritePixelFast MX,MY,$FFFF00

For steps=1 To 500
For winkel#=0 To 360*stp-1
If Ausdehnung(winkel#)=1 Then
x=MX+awinkel(winkel#,0)*steps
y=MY+awinkel(winkel#,1)*steps

rgb=ReadPixelFast(x,y)
If (rgb And $FF0000) Shr 16<>255 And (rgb And $FF00) Shr 8<>255 And (rgb And $FF)=0 Then
If 255-steps/2<=0 Then ausdehnung(winkel)=0
If x<=000 Then ausdehnung(winkel)=0
If x>=800 Then ausdehnung(winkel)=0
If y<=000 Then ausdehnung(winkel)=0
If y>=600 Then ausdehnung(winkel)=0

If ausdehnung(winkel)<>0 Then WritePixelFast x,y,Int(255-steps/2) Shl 16 + Int(255-steps/2) Shl 8

Else
Ausdehnung(Winkel)=0
End If
End If
Next
Next

UnlockBuffer

flips=(flips+2) Mod 360

For steps=0 To 360*stp-1
ausdehnung(steps)=1
Next
Color 255,255,255
Text 400,300,"Time to render scene: "+fps+" milliseconds!"

ende=MilliSecs()
fps=ende-start
Flip
Cls
Until KeyHit(1)


so könnte es aussehen, ich würde es aber so machen, wie Bladerunner es sagt.

PS: je größer stp ist, desto genauer
Suum cuique

[ www.ffs-net.de.vu ] [ Raycaster ]
  • Zuletzt bearbeitet von Apocalyptic am So, Jun 13, 2004 13:56, insgesamt 3-mal bearbeitet

BladeRunner

Moderator

BeitragSo, Jun 13, 2004 13:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Falls du die hübschen Muster meinst die entstehen: dafür müsttest du deine Vorgehensweise umkrempeln.
Prüfe für jeden Punkt auf dem screen ob er eine Sichtlinie zu der Lichtquelle hat, und wenn ja setze ihn. Nur so kannst du diese Störlinien effektiv vermeiden.
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

Michi1988

BeitragSo, Jun 13, 2004 15:50
Antworten mit Zitat
Benutzer-Profile anzeigen
danke für eure Antworten, werde ich mir nun
mal genau angucken.

Michi

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group