1+
2+ #include "colors.inc"
3+ #include "functions.inc"
4+ #include "logo.inc"
5+ #include "metals.inc"
6+ #include "math.inc"
7+ //#include "coordinates2.inc"
8+ #include "shapes2.inc"
9+ #include "textures.inc"
10+
11+ #include "E_Lampe.inc"
12+ //#include "Factory_hall.inc"
13+ //#include "claw.inc"
14+
15+
16+
17+ //global_settings { max_trace_level 5 ambient_light rgb <1.0, 1.0, 0.95> }
18+
19+ //camera {location <-6,2.0,-10> direction 3*z look_at < 4, 1.2, 0 >}
20+ //camera {location <4,2.0,2> direction 2*z look_at < 4, 2.0, 0 >}
21+ //camera {location <7.6,1.8,-1.8> direction 1*z look_at < 7.6, 1.8, 1.8 >}
22+ //camera {location <25,30,25> direction 2*z look_at < 0, 0, 5 >}
23+ //camera {location <0,10,25> direction 3*z look_at < 0, 1, 0 >}
24+ //camera {location <1,20,30> direction 1.8*z look_at < 1, 2, 0 >}
25+ //camera {location <0.5,-5,0.5> direction 0.3*z look_at < 0, 0, 0 >}
26+ //camera {location <0,2,150> direction 4*z look_at < 0, 2, 0 >}
27+ //camera {location <20,20,0> direction 5*z look_at < 5, 12, 0 >}
28+ //camera {location <-9,6,25> direction 5*z look_at <-9, 6, -3> }
29+ //camera {location <-9, 6, -6.0> direction 1*z look_at <-9, 5.8, -5> }
30+ //camera {location <-9, -3, -12.0> direction 3*z look_at <-9, 2, -6> }
31+
32+ //light_source {<0,10,20> rgb <1.0, 1.0, 0.95>}
33+ //light_source {<-140,200,300> rgb <1.0, 1.0, 0.95>*1.5}
34+ //light_source {<1,2,0> rgb <1.0, 1.0, 0.95>*1.5} //in-hall lamp
35+ //light_source {<140,200,-300> rgb <0.9, 0.9, 1.00>*0.8 shadowless}
36+
37+ //#declare scene_floor = plane
38+ //{ <0, -13, 0>, 0
39+ // pigment { checker color White, color Black }
40+ //}
41+ //object{ scene_floor }
42+ //object{ scene_floor2 }
43+ //object{ scene_floor translate <0, 6, 0> }
44+
45+
46+ //###############################
47+
48+ #declare chrome = texture
49+ {
50+ pigment { color rgbf < 0.5 , 0.5 , 0.5 > }
51+ finish { diffuse 0.1
52+ specular 0.5
53+ reflection 0.7
54+ roughness 0.005
55+ metallic
56+ }
57+ }
58+ //-------------------------------------
59+
60+ #declare Custom_SilverFinish = finish
61+ {
62+ metallic
63+ ambient 0.25
64+ diffuse 0.95
65+ reflection 0.05
66+ brilliance 6
67+ phong 1
68+ phong_size 100
69+ }
70+
71+ //-------------------------------------
72+
73+
74+ //object{Koordinaten}
75+
76+
77+
78+
79+
80+
81+ #declare hip_width = 7 ;
82+ #declare femoral_length = 10 ;
83+ #declare shank_length = 8 ;
84+ #declare leg_length = ( femoral_length + shank_length );
85+ #declare torso_height = leg_length * 0.63 ;
86+ #declare neck_length = torso_height * 0.15 ;
87+ #declare shoulder_width = hip_width * 1.15 ;
88+ #declare upper_arm_length = torso_height * 0.63 ;
89+ #declare lower_arm_length = upper_arm_length ;
90+
91+ #declare tube_diameter = 1 ;
92+
93+ //set joints coordinates
94+
95+ #declare local_clock = clock ;
96+
97+ #declare leg_step_angle = 60 ;
98+
99+
100+ //get_angles_for_one_step_left_leg(local_clock, leg_step_angle)
101+
102+ #declare left_hip_angle = 90 ;
103+ #declare left_shank_angle = 0 ;
104+
105+ //get_angles_for_one_step_right_leg(local_clock, leg_step_angle)
106+
107+ #declare right_hip_angle = 90 ;
108+ #declare right_shank_angle = 0 ;
109+
110+
111+ #if ( local_clock > 1 ) //>= 0.5 )
112+ #declare set_hip_y_offset = cos ( ( pi / 180 ) * ( 90 - left_hip_angle )) * leg_length ;
113+ #declare set_hip_x_offset = sin ( ( pi / 180 ) * ( 90 - left_hip_angle )) * leg_length ;
114+ #declare set_hip_x_offset = set_hip_x_offset + 2 * ( sin ( ( pi / 180 ) * ( 90 - leg_step_angle )) * leg_length );
115+ #else
116+ #declare set_hip_y_offset = cos (( pi / 180 ) * ( right_hip_angle - 90 )) * leg_length ;
117+ #declare set_hip_x_offset = - sin (( pi / 180 ) * ( right_hip_angle - 90 )) * leg_length ;
118+ #end
119+
120+ #declare set_hip_y_offset = set_hip_y_offset + tube_diameter ;
121+
122+
123+
124+ //hip base
125+ #declare A = < 0 , 0 , 0 >;
126+
127+ //left leg
128+
129+ #declare B_ = A + < 0 , 0 , hip_width / 2 >; //left hip joint
130+ #declare C_ = B_ + <- femoral_length , 0 , 0 >; //left knee joint
131+ #declare C_ = vrotate ( C_ , < 0 , 20 , 40 > ); //##linker Schenkel // " " "
132+ #declare D_ = A + < 0 ,- shank_length , 0 >; //left ankle
133+ #declare D_ = vrotate ( D_ , < 0 , 0 , left_shank_angle > ); // " "
134+ #declare D_ = D_ + C_ ; // " "
135+
136+ //right leg
137+
138+ #declare B__ = A + < 0 , 0 ,- hip_width / 2 >; //right hip joint
139+ #declare C__ = B__ + <- femoral_length , 0 , 0 >; //right knee joint
140+ #declare C__ = vrotate ( C__ , < 0 ,- 20 , 40 > ); //##rechter Schenkel // " " "
141+ #declare D__ = A + < 0 ,- shank_length , 0 >; //right ankle
142+ #declare D__ = vrotate ( D__ , < 0 , 0 , right_shank_angle > ); // " "
143+ #declare D__ = D__ + C__ ; // " "
144+
145+ //#declare left_shoulder_angle = 90;
146+ //#declare right_shoulder_angle = 90;
147+ //#declare left_ellbow_angle = 0;
148+ //#declare right_ellbow_angle = 0;
149+
150+ #declare E = A + < 0 , torso_height , 0 >;
151+ #declare E_ = E + < 0 , neck_length , 0 >; //head joint
152+
153+ //left arm
154+ //get_angles_for_one_step_left_arm(clock)
155+ #declare left_shoulder_angle = 90 ;
156+ #declare left_ellbow_angle = 0 ;
157+
158+ #declare F_ = E + < 0 , 0 , shoulder_width / 2 > ; //left shoulder joint
159+ #declare G_ = A + <- upper_arm_length , 0 , 0 >; //left ellbow joint
160+ #declare G_ = vrotate ( G_ , < 0 , 0 , 270 > ); // " " "
161+ #declare G_ = G_ + F_ + < 0 , 0 , tube_diameter * 1.9 >; // " " "
162+ #declare H_ = A + < 0 , - lower_arm_length , 0 >; //left hand joint
163+ #declare H_ = vrotate ( H_ , < 0 , 0 , 180 > ); // " " "
164+ #declare H_ = H_ + G_ ; // " " "
165+
166+ //right arm
167+ //get_angles_for_one_step_right_arm(clock)
168+ #declare right_shoulder_angle = 90 ;
169+ #declare right_ellbow_angle = 0 ;
170+
171+ #declare F__ = E + < 0 , 0 ,- shoulder_width / 2 > ; //right shoulder joint
172+ #declare G__ = A + <- upper_arm_length , 0 , 0 >; //right ellbow joint
173+ #declare G__ = vrotate ( G__ , < 0 , 0 , 270 > ); // " " "
174+ #declare G__ = G__ + F__ + < 0 , 0 ,- tube_diameter * 1.9 >; // " " "
175+ #declare H__ = A + < 0 , - lower_arm_length , 0 >; //right hand joint
176+ #declare H__ = vrotate ( H__ , < 0 , 0 , 180 > ); // " " "
177+ #declare H__ = H__ + G__ ; // " " "
178+
179+
180+ //correct height of all points due to walking movement
181+ #declare A = A + < set_hip_x_offset , set_hip_y_offset , 0 >;
182+ #declare B_ = B_ + < set_hip_x_offset , set_hip_y_offset , 0 >;
183+ #declare B__ = B__ + < set_hip_x_offset , set_hip_y_offset , 0 >;
184+ #declare C_ = C_ + < set_hip_x_offset , set_hip_y_offset , 0 >;
185+ #declare C__ = C__ + < set_hip_x_offset , set_hip_y_offset , 0 >;
186+ #declare D_ = D_ + < set_hip_x_offset , set_hip_y_offset , 0 >;
187+ #declare D__ = D__ + < set_hip_x_offset , set_hip_y_offset , 0 >;
188+ #declare E = E + < set_hip_x_offset , set_hip_y_offset , 0 >;
189+ #declare E_ = E_ + < set_hip_x_offset , set_hip_y_offset , 0 >;
190+ #declare F_ = F_ + < set_hip_x_offset , set_hip_y_offset , 0 >;
191+ #declare F__ = F__ + < set_hip_x_offset , set_hip_y_offset , 0 >;
192+ #declare G_ = G_ + < set_hip_x_offset , set_hip_y_offset , 0 >;
193+ #declare G__ = G__ + < set_hip_x_offset , set_hip_y_offset , 0 >;
194+ #declare H_ = H_ + < set_hip_x_offset , set_hip_y_offset , 0 >;
195+ #declare H__ = H__ + < set_hip_x_offset , set_hip_y_offset , 0 >;
196+
197+
198+ //rotate around foot on ground to prevent other foot to go through ground
199+
200+ #declare full_foot_rotate_angle = 5 ;
201+
202+ #if ( local_clock <= 1.00 )
203+ #declare R = D__ ;
204+ #declare foot_rotate_angle = full_foot_rotate_angle * ( local_clock - 0.75 ) * 4 ;
205+ #end
206+ #if ( local_clock <= 0.75 )
207+ #declare R = D__ ;
208+ #declare foot_rotate_angle = full_foot_rotate_angle
209+ - full_foot_rotate_angle * ( local_clock - 0.50 ) * 4 ;
210+ #end
211+ #if ( local_clock <= 0.50 )
212+ #declare R = D_ ;
213+ //#declare foot_rotate_angle = full_foot_rotate_angle * (local_clock-0.25) * 4;
214+ #declare foot_rotate_angle = full_foot_rotate_angle
215+ - full_foot_rotate_angle * ( local_clock - 0.00 ) * 4 ;
216+ #end
217+ #if ( local_clock <= 0.25 )
218+ #declare R = D_ ;
219+ //#declare foot_rotate_angle = full_foot_rotate_angle
220+ // - full_foot_rotate_angle * (local_clock-0.00) * 4;
221+ #declare foot_rotate_angle = full_foot_rotate_angle * ( local_clock - 0.25 ) * 4 ;
222+ #end
223+
224+ //#declare A = A + vrotate( R, <0,0,foot_rotate_angle> );
225+ //#declare B_ = B_ + vrotate( R, <0,0,foot_rotate_angle> );
226+ //#declare B__ = B__ + vrotate( R, <0,0,foot_rotate_angle> );
227+ //#declare C_ = C_ + vrotate( R, <0,0,foot_rotate_angle> );
228+ //#declare C__ = C__ + vrotate( R, <0,0,foot_rotate_angle> );
229+ //#declare D_ = D_ + vrotate( R, <0,0,foot_rotate_angle> );
230+ //#declare D__ = D__ + vrotate( R, <0,0,foot_rotate_angle> );
231+ //#declare E = E + vrotate( R, <0,0,foot_rotate_angle> );
232+ //#declare E_ = E_ + vrotate( R, <0,0,foot_rotate_angle> );
233+ //#declare F_ = F_ + vrotate( R, <0,0,foot_rotate_angle> );
234+ //#declare F__ = F__ + vrotate( R, <0,0,foot_rotate_angle> );
235+ //#declare G_ = G_ + vrotate( R, <0,0,foot_rotate_angle> );
236+ //#declare G__ = G__ + vrotate( R, <0,0,foot_rotate_angle> );
237+ //#declare H_ = H_ + vrotate( R, <0,0,foot_rotate_angle> );
238+ //#declare H__ = H__ + vrotate( R, <0,0,foot_rotate_angle> );
239+
240+ //#declare S = C_ + vrotate( R, < 0, 0, (pi/180) * 5 > );
241+ //#declare S = vaxis_rotate( C_, R, 15 );
242+ //sphere{ R tube_diameter * 1.5 pigment{Red} }
243+ //sphere{ S tube_diameter * 1.5 pigment{Red} }
244+
245+ ////start walking from standing
246+
247+ //time-dependend translation of coordinates (A is fixed)
248+
249+ //left leg forward
250+ //#declare C_ = C_ + C_ * <femoral_length * sin(15), 0, 0>;
251+ //#declare D_ = D_ * <sin(0) , cos(0) , 0>;
252+
253+
254+
255+
256+
257+
258+
259+
260+ ////Assemble body
261+
262+ #declare helferlein = union
263+ {
264+
265+ //hip
266+ cylinder { B__ B_ tube_diameter pigment { Grey } finish { Custom_SilverFinish } }
267+ //left leg
268+ sphere { B_ tube_diameter * 1.5 pigment { Grey } finish { Custom_SilverFinish } }
269+ cylinder { B_ C_ tube_diameter pigment { Grey } finish { Custom_SilverFinish } }
270+ sphere { C_ tube_diameter * 1.3 pigment { Grey } finish { Custom_SilverFinish } }
271+ cylinder { C_ D_ tube_diameter pigment { Grey } finish { Custom_SilverFinish } }
272+ sphere { D_ tube_diameter pigment { Grey } finish { Custom_SilverFinish } }
273+ //right leg
274+ sphere { B__ tube_diameter * 1.5 pigment { Grey } finish { Custom_SilverFinish } }
275+ cylinder { B__ C__ tube_diameter pigment { Grey } finish { Custom_SilverFinish } }
276+ sphere { C__ tube_diameter * 1.3 pigment { Grey } finish { Custom_SilverFinish } }
277+ cylinder { C__ D__ tube_diameter pigment { Grey } finish { Custom_SilverFinish } }
278+ sphere { D__ tube_diameter pigment { Grey } finish { Custom_SilverFinish } }
279+
280+ //torso
281+ cylinder { A E tube_diameter pigment { Grey } finish { Custom_SilverFinish } }
282+ //neck
283+ sphere { E tube_diameter * 1.3 pigment { Grey } finish { Custom_SilverFinish } }
284+ cylinder { E E_ tube_diameter * 0.8 pigment { Grey } finish { Custom_SilverFinish } }
285+ #declare lamp_scale = 0.9 ;
286+ //object{ socket scale lamp_scale translate y*(torso_height + 2.2*neck_length)}
287+ object
288+ {
289+ socket
290+ scale lamp_scale
291+ translate E_ + < 0 , 3.2 * lamp_scale , 0 >
292+ pigment { Grey }
293+ finish { Custom_SilverFinish }
294+ }
295+
296+ //head
297+ #switch ( clock )
298+ #range ( 0.0 , 0.2 )
299+ // object{ lamp_off scale lamp_scale translate E_ + <0, torso_height + 2.2*neck_length + 4*lamp_scale, 0> }
300+ #break
301+ #range ( 0.2 , 0.3 )
302+ // object{ lamp_on scale lamp_scale translate E_ + <0, torso_height + 2.2*neck_length + 4*lamp_scale, 0> }
303+ #break
304+ #range ( 0.3 , 0.4 )
305+ // object{ lamp_off scale lamp_scale translate E_ + <0, torso_height + 2.2*neck_length + 4*lamp_scale, 0> }
306+ #break
307+ #range ( 0.4 , 0.6 )
308+ // object{ lamp_on scale lamp_scale translate E_ + <0, torso_height + 2.2*neck_length + 4*lamp_scale, 0> }
309+ #break
310+ #range ( 0.6 , 0.7 )
311+ // object{ lamp_off scale lamp_scale translate E_ + <0, torso_height + 2.2*neck_length + 4*lamp_scale, 0> }
312+ #break
313+ #range ( 0.7 , 1.0 )
314+ // object{ lamp_on scale lamp_scale translate E_ + <0, torso_height + 2.2*neck_length + 4*lamp_scale, 0> }
315+ #break
316+ #end
317+
318+ //object{ lamp_off scale lamp_scale translate E_ + <0, (3.2 + 4)*lamp_scale, 0> }
319+
320+ //shoulders
321+ cylinder { F__ F_ tube_diameter pigment { Grey } finish { Custom_SilverFinish } }
322+ //left arm
323+ sphere { F_ tube_diameter * 1.3 pigment { Grey } finish { Custom_SilverFinish } }
324+ cylinder { F_ G_ tube_diameter pigment { Grey } finish { Custom_SilverFinish } }
325+ sphere { G_ tube_diameter * 1.3 pigment { Grey } finish { Custom_SilverFinish } }
326+ cylinder { G_ H_ tube_diameter pigment { Grey } finish { Custom_SilverFinish } }
327+ sphere { H_ tube_diameter * 1.4 pigment { Grey } finish { Custom_SilverFinish } }
328+ //right arm
329+ sphere { F__ tube_diameter * 1.3 pigment { Grey } finish { Custom_SilverFinish } }
330+ cylinder { F__ G__ tube_diameter pigment { Grey } finish { Custom_SilverFinish } }
331+ sphere { G__ tube_diameter * 1.3 pigment { Grey } finish { Custom_SilverFinish } }
332+ cylinder { G__ H__ tube_diameter pigment { Grey } finish { Custom_SilverFinish } }
333+ sphere { H__ tube_diameter * 1.4 pigment { Grey } finish { Custom_SilverFinish } }
334+
335+ }
336+
337+ #declare world_scale = 0.05 *( 1 / 0.9 );
338+
339+ //#declare body_x_offset = 4;
340+ #declare body_x_offset = 0 ;
341+
342+
343+ //#declare finger_angle = 9.9 + 25 - 25*clock;
344+
345+ //#declare claw_ = get_claw(finger_angle)
346+
347+ #declare thread_rise = rise * 0.7 * lamp_scale ;
348+ #declare screw_height = thread_rise * 16 - 4 ;
349+
350+ #declare screw_height = ( screw_height + 4 ) * world_scale ;
351+
352+ #declare lamp_free = object
353+ {
354+ lamp_on
355+ scale lamp_scale * world_scale
356+ }
357+ #declare lamp_free_obj =
358+ object {
359+ lamp_free
360+ // rotate <0, 0 + 1440*clock, 0>
361+ // translate E_*world_scale + <body_x_offset, ( 3.6 )*lamp_scale*world_scale, 0>
362+ translate E_ * world_scale + < body_x_offset , lamp_scale * world_scale + 0.1 , 0 >
363+ translate < 0 , screw_height , 0 >
364+ }
365+
366+ #declare helferlein = union {
367+ object { helferlein scale world_scale translate < body_x_offset , 0 , 0 >}
368+ object { lamp_free_obj }
369+ }
0 commit comments