POV-Ray : Newsgroups : povray.animations : "thinking snake"-Macro [WIP] : Re: "thinking snake"-Macro [WIP] Server Time
1 Jun 2024 06:28:55 EDT (-0400)
  Re: "thinking snake"-Macro [WIP]  
From: MSAB
Date: 12 Nov 2006 13:40:01
Message: <web.4557694bd8ae629bed121eed0@news.povray.org>
"Chrisir" <nomail@nomail> wrote:
> I'd like to see the code.
>
> Thanks!
>
> Chris
Sure, but my PC chrashed a few days ago and i didn't saved the file. Now I
only have a very old version of macro. I don't know at the moment if it's
works.

Here's the code (i hope it's not too long):

#macro Snake (Kollisionsobjekte,Ausgangspunkt,Radius)//object,starting
point,radius of the sphere_swepp

         #if (frame_number > 0)
                  union{

                  #local Punkt     = array[40][40] ;

                  #if (frame_number = 2)
                        #declare Startframe_1 =  1 ;
                        #declare Startframe_2 = 40 ;
                        #declare Array_Def    =  1 ;

                        #while (Startframe_1 < final_frame+1)
                                #while (Startframe_2 < final_frame+1)
                                        #while (Array_Def < 40 )

                                                #fopen Array "Array.pkt"
append
                                                #write (Array, "#switch
(frame_number)n")
                                                #write (Array, "#range
("str(Startframe_1,0,0)","str(Startframe_2,0,0)")nt#declare First_Array =
"str(Array_Def,0,0)" ;nt#declare Second_Array =
"str(frame_number-Startframe_1+1,0,0)" ;n#break")
                                                #write (Array, "#end")
                                                #fclose Array
                                        #declare Array_Def = Array_Def + 1 ;
                                        #end
                                #declare Startframe_2 = Startframe_2 + 40 ;
                                #end
                        #declare Startframe_1 = Startframe_1 + 40 ;
                        #end
                  #end

                  #declare Punkt[1][1] = Ausgangspunkt ;

                  #if (frame_number = 2)

                             #local Anfangsframe = 1 ;
                             #local Schlussframe = final_frame ;
                             #while (Anfangsframe < Schlussframe)
                                       #fopen Punkte_schreiben
"sphere_points.ptk" append
                                       #write (Punkte_schreiben,
"#if(frame_number >"str(Anfangsframe,0,0)") ,
Punkt["str(Anfangsframe,0,0)"],Radius #endn")
                                       #fclose Punkte_schreiben
                             #declare Anfangsframe = Anfangsframe + 1 ;
                             #end
                  #end

                  #if (frame_number > 1)
                             #include "Zwischenspeicher.ptk"
                  #end

                  #macro Kollisionsabfrage (PunktNr,Berechnungslimit)
                  union{

                             #if ( PunktNr > 1)

                                       #if ( Berechnungslimit > 1 )

                                                #ifdef (Trace)
                                                        #undef Trace
                                                        #undef Zufallx
                                                        #undef Zufally
                                                        #undef Zufallz
                                                #end

                                                #local Zufallx = seed (
Berechnungslimit + PunktNr + Punkt[PunktNr-1].x + 10 + frame_number) ;
                                                #local Zufally = seed (
Berechnungslimit + PunktNr + Punkt[PunktNr-1].y + 20 + frame_number) ;
                                                #local Zufallz = seed (
Berechnungslimit + PunktNr + Punkt[PunktNr-1].z + 30 + frame_number) ;

                                                #local Testpunkt =
Punkt[PunktNr-1]+<rand(Zufallx),rand(Zufally),rand(Zufallz)>*4-2 ;

                                                #local Trace =
trace(Kollisionsobjekte,Punkt[PunktNr-1],Testpunkt) ;

                                                sphere{<0,0,0>0}

                                                #fopen Protokoll_Trace
"Protokoll.ptk" append
                                                #write
(Protokoll_Trace,"Tracewert von Punkt "str(PunktNr,0,0)":
<"str(Trace.x,0,1)","str(Trace.y,0,1)","str(Trace.z,0,1)">n")
                                                #fclose Protokoll_Trace

                                                #if (Berechnungslimit = 98)
                                                        sphere{<0,0,0>0}
                                                #end

                                                #if ( Trace.x = 0 &
                                                      Trace.y = 0 &
                                                      Trace.z = 0 )

                                                        #declare
Punkt[PunktNr] = Testpunkt ;

                                                        #warning
concat("Punkt "str(PunktNr,0,0)" wurde erfolgreich beim
"str(101-Berechnungslimit,0,0)". mal berechnet! Er hat den Wert
<"str(Punkt[PunktNr].x,0,5)","str(Punkt[PunktNr].y,0,5)","str(Punkt[PunktNr].z,0,5)">")
                                                        sphere{<0,0,0>0}

                                                        #fopen Protokoll
"Protokoll.ptk" append
                                                        #write (Protokoll,
"Punkt "str(PunktNr,0,0)" musste "str(101-Berechnungslimit,0,0)" berechnet
werden!n")
                                                        #write (Protokoll,
"Punkt "str(PunktNr,0,0)" hat den Wert:
<"str(Punkt[PunktNr].x,0,3)","str(Punkt[PunktNr].y,0,3)","str(Punkt[PunktNr].z,0,3)">nn")
                                                        #fclose Protokoll

                                                        #if (frame_number >
1)
                                                                 #fopen
Speicher_fuellen "Zwischenspeicher.ptk" append
                                                                 #local
Speicher_Punkte = Punkt[PunktNr] ;

#write (Speicher_fuellen,"#declare Punkt["str(PunktNr,0,0)"] = <" vstr(3,
Speicher_Punkte, ", ", 0,16)"> ; n")

#write (Speicher_fuellen,"#warning concat("""""Punkt "str(PunktNr,0,0)"
betraegt
""<"str(Punkt[PunktNr].x,0,3)","str(Punkt[PunktNr].y,0,3)","str(Punkt[PunktNr].z,0,3)">")nn")
                                                                 #fclose
Speicher_fuellen

                                                        #end

                                                #else
                                                        #warning
concat("Punkt "str(PunktNr,0,0)" kann nurnoch "str(Berechnungslimit,0,0)"
mal berechnet werden!")

Kollisionsabfrage(PunktNr,Berechnungslimit-1)
                                                #end

                                       #else
                                                #error concat("Punkt
"str(PunktNr,0,0)" konnte nicht erfolgreich berechnet werden!
Berechnungslimit: "str(Berechnungslimit,0,0))
                                       #end

                             #end

                  }
                  #end

                  #if (frame_number > 1)
                             object { Kollisionsabfrage (First_Array,100) }
                  #end

                  #if (frame_number = 1)
                             #fopen Speicher_wiederherstellen
"Zwischenspeicher.ptk" write
                             #write (Speicher_wiederherstellen
"//****************************************************n//Zwischenspeicher,
generiert vom Snake-Makro.      **n//Autor: MSAB
          **n//****************************************************nn")
                             #fclose Speicher_wiederherstellen

                             #fopen Speicher_wiederherstellen
"Protokoll.ptk" write
                             #write (Speicher_wiederherstellen
"//****************************************************n//Protokoll,
generiert vom Snake-Makro.             **n//Autor: MSAB

**n//****************************************************nn")
                             #fclose Speicher_wiederherstellen

                             #fopen Speicher_wiederherstellen
"sphere_points.ptk" write
                             #write (Speicher_wiederherstellen
"//****************************************************n//'sphere_sweep'-Punkte,
generiert vom Snake-Makro. **n//Autor: MSAB
     **n//****************************************************nn")
                             #fclose Speicher_wiederherstellen

                             #fopen Speicher_wiederherstellen "Array.ptk"
write
                             #write (Speicher_wiederherstellen
"//****************************************************n//'array'-Definition,
generiert vom Snake-Makro.    **n//Autor: MSAB
        **n//****************************************************nn")
                             #fclose Speicher_wiederherstellen
                 #end


                  sphere_sweep {
                  linear_spline
                  frame_number+3,
                  Ausgangspunkt,Radius,
                  Punkt[1][1],Radius,
                  Punkt[1][1],Radius,
                  Punkt[1][1],Radius
                  #if (frame_number >  1)
                             #include"sphere_points.ptk"
                  #end
                  }
         }
         #end

#end


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.