direction cosines, math problem

Sep 29, 2007 at 9:50pm

direction cosines, math problem

hi, i am trying to make a plane always keep its orientation facing the
center. after some digging i have found i need to use ” direction cosines”
to extract the angles. but something is wrong.

#P window setfont “Sans Serif” 9.;
#P window linecount 1;
#P message 82 525 86 9109513 rotatexyz $1 $2 $3;
#P comment 22 453 55 9109513 rad to deg;
#P newex 82 545 37 9109513 s toVid;
#P newex 82 503 40 9109513 jit.iter;
#P newex 82 475 103 9109513 jit.op @op * @val 180.;
#P newex 82 452 107 9109513 jit.op @op / @val 3.141;
#P newex 82 400 68 9109513 jit.op @op cos;
#P comment 1 402 78 9109513 direction cosines;
#P newex 82 321 56 9109513 t l l;
#P newex 82 372 56 9109513 jit.op @op /;
#P comment 16 374 53 9109513 unit vector;
#P newex 128 343 311 9109513 jit.expr @expr
sqrt(pow(in[0].p[0]\,2)+pow(in[0].p[1]\,2)+pow(in[0].p[2]\,2));
#P newex 263 186 55 9109513 jit.multiplex;
#P newex 263 155 92 9109513 jit.matrix 3 float32 1;
#P window linecount 3;
#P newex 263 213 87 9109513 jit.gl.mesh quadr @draw_mode lines @blend_enable
1;
#P window linecount 2;
#P newex 18 282 130 9109513 jit.gl.gridshape quadr @shape sphere @scale 0.1
0.1 0.1;
#P window linecount 1;
#P newex 380 250 37 9109513 s toVid;
#P newex 18 209 35 9109513 r toVid;
#P newex 369 43 31 9109513 r draz;
#P newex 389 86 63 9109513 speedlim 500;
#P newex 369 64 30 9109513 t b b;
#P newex 369 134 44 9109513 jit.matrix;
#P newex 380 160 162 9109513 jit.slide @slide_up 5. @slide_down 5.;
#P newex 380 206 38 9109513 t b l;
#P newex 380 184 40 9109513 jit.iter;
#P newex 389 107 88 9109513 jit.noise 3 float32 1;
#P newex 1 27 45 9109513 loadbang;
#P message 1 48 81 9109513 texture grid 64 64;
#P message 91 96 29 9109513 reset;
#P window linecount 2;
#P newex 91 115 95 9109513 jit.gl.handle quadr @inherit_transform 1;
#P window linecount 3;
#P newex 18 232 132 9109513 jit.gl.videoplane quadr @texture grid @color 1 1
1 0.2 @blend_enable 1;
#P toggle 17 70 15 0;
#P window linecount 1;
#P newex 17 91 50 9109513 qmetro 5;
#P newex 46 136 33 9109513 s draz;
#P newex 17 114 71 9109513 t b b erase;
#P newex 17 183 73 9109513 jit.window quadr;
#P newex 17 161 160 9109513 jit.gl.render quadr @camera 0 5 0.01;
#P newex 380 228 96 9109513 pack position 0. 0. 0.;
#P comment 63 345 62 9109513 length of line;
#P window linecount 3;
#P comment 155 402 161 9109513 < << like
http://www.geom.uiuc.edu/docs/reference/CRC-formulas/node52.html;
#P connect 33 0 34 0;
#P fasten 18 0 31 0 374 317 87 317;
#P connect 18 0 17 0;
#P connect 39 0 37 0;
#P connect 36 0 39 0;
#P connect 13 0 12 0;
#P connect 13 0 8 0;
#P connect 8 0 7 0;
#P connect 7 0 5 0;
#P fasten 12 0 3 0 6 149 22 149;
#P fasten 5 2 3 0 82 157 22 157;
#P connect 5 0 3 0;
#P fasten 10 0 3 0 96 159 22 159;
#P connect 22 0 9 0;
#P connect 5 1 6 0;
#P connect 31 0 30 0;
#P connect 30 0 33 0;
#P connect 34 0 35 0;
#P connect 35 0 36 0;
#P connect 11 0 10 0;
#P connect 31 1 28 0;
#P fasten 28 0 30 1 133 367 133 367;
#P fasten 19 0 26 0 374 108 268 108;
#P connect 26 0 27 0;
#P connect 27 0 25 0;
#P fasten 17 0 27 1 385 180 313 180;
#P connect 21 0 19 0;
#P connect 19 0 18 0;
#P fasten 14 0 18 0 394 130 374 130;
#P connect 17 0 15 0;
#P connect 15 0 16 0;
#P connect 16 0 2 0;
#P fasten 2 0 23 0 385 248 385 248;
#P connect 19 1 20 0;
#P connect 20 0 14 0;
#P connect 16 1 2 1;
#P window clipboard copycount 40;

#33897
Sep 30, 2007 at 8:50am

this is better, but its 2d, how do i convert Cartesian to polar in 3d?(!)
the equation at the bottom of this page makes no sense, i need three radians
to correctly Orient the cube, this gives me 2 and a length. pls good ppl of
intranet…

http://electron9.phys.utk.edu/vectors/3dcoordinates.htm

#P window setfont “Sans Serif” 9.;
#P window linecount 1;
#P newex 216 429 98 9109513 pak rotatexyz 0. 0. 0.;
#P newex 216 452 37 9109513 s toVid;
#P message 273 323 31 9109513 $1 $2;
#P newex 304 406 40 9109513 * 180.;
#P newex 304 385 63 9109513 / 3.141593;
#P flonum 316 430 35 9 0 0 0 139 0 0 0 221 221 221 222 222 222 0 0 0;
#P flonum 304 366 35 9 0 0 0 139 0 0 0 221 221 221 222 222 222 0 0 0;
#P comment 341 367 73 9109513 amplitude/angle;
#P newex 273 344 41 9109513 cartopol;
#B color 5;
#P comment 353 431 44 9109513 degrees;
#P flonum 468 123 35 9 0 0 0 139 0 0 0 221 221 221 222 222 222 0 0 0;
#P message 408 49 60 9109513 0. , 360 3000;
#P newex 408 97 118 9109513 expr $f1*(3.141593 / 180.);
#P newex 407 69 40 9109513 line 0.;
#P newex 408 171 50 9109513 pack 0. 0.;
#P newex 438 124 20 9109513 sin;
#P newex 438 148 27 9109513 * 1.;
#P newex 408 124 23 9109513 cos;
#P newex 408 148 27 9109513 * 1.;
#P newex 267 230 55 9109513 jit.multiplex;
#P newex 267 200 92 9109513 jit.matrix 3 float32 1;
#P window linecount 3;
#P newex 267 252 87 9109513 jit.gl.mesh quadr @draw_mode lines @blend_enable
1;
#P window linecount 1;
#P newex 384 296 37 9109513 s toVid;
#P newex 373 199 92 9109513 jit.matrix 3 float32 1;
#P newex 384 253 38 9109513 t b l;
#P newex 373 230 40 9109513 jit.iter;
#P newex 384 274 96 9109513 pack position 0. 0. 0.;
#P window linecount 2;
#P newex 18 301 130 9109513 jit.gl.gridshape quadr @shape sphere @scale 0.1
0.1 0.1;
#P window linecount 1;
#P newex 18 228 35 9109513 r toVid;
#P newex 267 143 31 9109513 r draz;
#P newex 1 14 45 9109513 loadbang;
#P message 1 67 81 9109513 texture grid 64 64;
#P message 91 115 29 9109513 reset;
#P window linecount 2;
#P newex 91 134 95 9109513 jit.gl.handle quadr @inherit_transform 1;
#P newex 18 251 225 9109513 jit.gl.gridshape quadr @texture grid @color 1 1
1 0.2 @blend_enable 1 @shape cube @scale 0.2 0.5 0.5;
#P toggle 17 89 15 0;
#P window linecount 1;
#P newex 17 110 50 9109513 qmetro 5;
#P newex 46 155 33 9109513 s draz;
#P newex 17 133 71 9109513 t b b erase;
#P newex 17 202 73 9109513 jit.window quadr;
#P newex 17 180 155 9109513 jit.gl.render quadr @camera 0 0 3.5;
#P connect 10 0 9 0;
#P connect 10 0 5 0;
#P connect 5 0 4 0;
#P connect 4 0 2 0;
#P fasten 9 0 0 0 6 168 22 168;
#P fasten 2 2 0 0 82 176 22 176;
#P connect 2 0 0 0;
#P fasten 7 0 0 0 96 178 22 178;
#P connect 12 0 6 0;
#P connect 2 1 3 0;
#P connect 8 0 7 0;
#P connect 40 0 39 0;
#P connect 11 0 20 0;
#P connect 20 0 21 0;
#P connect 21 0 19 0;
#P fasten 15 0 38 0 378 303 278 303;
#P connect 38 0 32 0;
#P fasten 37 0 40 3 309 426 308 426;
#P connect 32 1 34 0;
#P connect 34 0 36 0;
#P connect 36 0 37 0;
#P fasten 17 0 21 1 378 224 317 224;
#P fasten 37 0 35 0 309 426 321 426;
#P fasten 11 0 17 0 272 180 378 180;
#P fasten 26 0 17 0 413 194 378 194;
#P connect 17 0 15 0;
#P fasten 15 0 16 0 378 251 389 251;
#P connect 16 0 14 0;
#P fasten 14 0 18 0 389 299 389 299;
#P connect 29 0 27 0;
#P fasten 10 0 29 0 6 41 413 41;
#P connect 27 1 29 0;
#P connect 27 0 28 0;
#P connect 28 0 23 0;
#P connect 23 0 22 0;
#P connect 22 0 26 0;
#P connect 16 1 14 1;
#P connect 30 0 22 1;
#P connect 28 0 25 0;
#P connect 25 0 24 0;
#P connect 24 0 26 1;
#P connect 30 0 24 1;
#P window clipboard copycount 41;

On 9/29/07, yair reshef wrote:
>
> hi, i am trying to make a plane always keep its orientation facing the
> center. after some digging i have found i need to use ” direction cosines”
> to extract the angles. but something is wrong.
>
> #P window setfont “Sans Serif” 9.;
> #P window linecount 1;
> #P message 82 525 86 9109513 rotatexyz $1 $2 $3;
> #P comment 22 453 55 9109513 rad to deg;
> #P newex 82 545 37 9109513 s toVid;
> #P newex 82 503 40 9109513 jit.iter;
> #P newex 82 475 103 9109513 jit.op @op * @val 180.;
> #P newex 82 452 107 9109513 jit.op @op / @val 3.141;
> #P newex 82 400 68 9109513 jit.op @op cos;
> #P comment 1 402 78 9109513 direction cosines;
> #P newex 82 321 56 9109513 t l l;
> #P newex 82 372 56 9109513 jit.op @op /;
> #P comment 16 374 53 9109513 unit vector;
> #P newex 128 343 311 9109513 jit.expr @expr
> sqrt(pow(in[0].p[0]\,2)+pow(in[0].p[1]\,2)+pow(in[0].p[2]\,2));
> #P newex 263 186 55 9109513 jit.multiplex;
> #P newex 263 155 92 9109513 jit.matrix 3 float32 1;
> #P window linecount 3;
> #P newex 263 213 87 9109513 jit.gl.mesh quadr @draw_mode lines
> @blend_enable 1;
> #P window linecount 2;
> #P newex 18 282 130 9109513 jit.gl.gridshape quadr @shape sphere @scale
> 0.1 0.1 0.1;
> #P window linecount 1;
> #P newex 380 250 37 9109513 s toVid;
> #P newex 18 209 35 9109513 r toVid;
> #P newex 369 43 31 9109513 r draz;
> #P newex 389 86 63 9109513 speedlim 500;
> #P newex 369 64 30 9109513 t b b;
> #P newex 369 134 44 9109513 jit.matrix;
> #P newex 380 160 162 9109513 jit.slide @slide_up 5. @slide_down 5.;
> #P newex 380 206 38 9109513 t b l;
> #P newex 380 184 40 9109513 jit.iter;
> #P newex 389 107 88 9109513 jit.noise 3 float32 1;
> #P newex 1 27 45 9109513 loadbang;
> #P message 1 48 81 9109513 texture grid 64 64;
> #P message 91 96 29 9109513 reset;
> #P window linecount 2;
> #P newex 91 115 95 9109513 jit.gl.handle quadr @inherit_transform 1;
> #P window linecount 3;
> #P newex 18 232 132 9109513 jit.gl.videoplane quadr @texture grid @color 1
> 1 1 0.2 @blend_enable 1;
> #P toggle 17 70 15 0;
> #P window linecount 1;
> #P newex 17 91 50 9109513 qmetro 5;
> #P newex 46 136 33 9109513 s draz;
> #P newex 17 114 71 9109513 t b b erase;
> #P newex 17 183 73 9109513 jit.window quadr;
> #P newex 17 161 160 9109513 jit.gl.render quadr @camera 0 5 0.01;
> #P newex 380 228 96 9109513 pack position 0. 0. 0.;
> #P comment 63 345 62 9109513 length of line;
> #P window linecount 3;
> #P comment 155 402 161 9109513 < << like
> http://www.geom.uiuc.edu/docs/reference/CRC-formulas/node52.html;
> #P connect 33 0 34 0;
> #P fasten 18 0 31 0 374 317 87 317;
> #P connect 18 0 17 0;
> #P connect 39 0 37 0;
> #P connect 36 0 39 0;
> #P connect 13 0 12 0;
> #P connect 13 0 8 0;
> #P connect 8 0 7 0;
> #P connect 7 0 5 0;
> #P fasten 12 0 3 0 6 149 22 149;
> #P fasten 5 2 3 0 82 157 22 157;
> #P connect 5 0 3 0;
> #P fasten 10 0 3 0 96 159 22 159;
> #P connect 22 0 9 0;
> #P connect 5 1 6 0;
> #P connect 31 0 30 0;
> #P connect 30 0 33 0;
> #P connect 34 0 35 0;
> #P connect 35 0 36 0;
> #P connect 11 0 10 0;
> #P connect 31 1 28 0;
> #P fasten 28 0 30 1 133 367 133 367;
> #P fasten 19 0 26 0 374 108 268 108;
> #P connect 26 0 27 0;
> #P connect 27 0 25 0;
> #P fasten 17 0 27 1 385 180 313 180;
> #P connect 21 0 19 0;
> #P connect 19 0 18 0;
> #P fasten 14 0 18 0 394 130 374 130;
> #P connect 17 0 15 0;
> #P connect 15 0 16 0;
> #P connect 16 0 2 0;
> #P fasten 2 0 23 0 385 248 385 248;
> #P connect 19 1 20 0;
> #P connect 20 0 14 0;
> #P connect 16 1 2 1;
> #P window clipboard copycount 40;
>
>
>

#113555
Sep 30, 2007 at 9:27am

On 9/30/07, yair reshef wrote:
> this is better, but its 2d, how do i convert Cartesian to polar in 3d?(!)

http://local.wasp.uwa.edu.au/~pbourke/geometry/coords/

wes

#113556
Sep 30, 2007 at 11:09am

thanks wes, the page you directed me is missing a formula to find the
zenith(?) angle (probably me missing the point).
i followed wikipedia on this, also switched from arctang to atan2. bu still
no good, i still thnk i am missing an angle.

http://en.wikipedia.org/wiki/Spherical_coordinates

#P window setfont “Sans Serif” 9.;
#P window linecount 1;
#P message 224 466 45 9109513 $1 $2 0.;
#B color 5;
#P newex 224 442 40 9109513 jit.iter;
#P newex 194 493 101 9109513 pak rotatexyz 0. 0. 0.;
#P newex 196 518 37 9109513 s toVid;
#P window setfont “Sans Serif” 14.;
#P newex 224 403 222 9109518 jit.expr @expr “(in[0]*180.)/ 3.141″;
#P window setfont “Sans Serif” 9.;
#P message 453 561 154 9109513 81.863235 80.227272 1.677804;
#P newex 453 538 57 9109513 prepend set;
#P newex 454 495 56 9109513 jit.unpack 3;
#P user jit.cellblock 552 515 600 536 139 9 1 1 45 17 0 1 1 0 0 0 0 0 1 0 0
0 255 255 255 0 0 0 0 0 0 191 191 191 0 0 0 215 215 240 1 1 1 0 4 0 0 0;
#P user jit.cellblock 502 515 550 536 139 9 1 1 45 17 0 1 1 0 0 0 0 0 1 0 0
0 255 255 255 0 0 0 0 0 0 191 191 191 0 0 0 215 215 240 1 1 1 0 4 0 0 0;
#P user jit.cellblock 454 515 502 536 139 9 1 1 45 17 0 1 1 0 0 0 0 0 1 0 0
0 255 255 255 0 0 0 0 0 0 191 191 191 0 0 0 215 215 240 1 1 1 0 4 0 0 0;
#P window setfont “Sans Serif” 14.;
#P window linecount 2;
#P newex 224 354 374 9109518 jit.expr @expr
“atan2((pow(in[0].p[0]\,2)+pow(in[0].p[1]\,2)) \, in[0].p[2])”
“atan2(in[0].p[0]\, in[0].p[1])” in[0].p[2];
#P window setfont “Sans Serif” 9.;
#P window linecount 1;
#P newex 396 128 92 9109513 jit.op @op – @val 1.;
#P newex 396 107 93 9109513 jit.op @op * @val 2.;
#P newex 270 204 55 9109513 jit.multiplex;
#P newex 270 173 92 9109513 jit.matrix 3 float32 1;
#P window linecount 3;
#P newex 270 231 87 9109513 jit.gl.mesh quadr @draw_mode lines @blend_enable
1;
#P window linecount 2;
#P newex 25 300 130 9109513 jit.gl.gridshape quadr @shape sphere @scale 0.1
0.1 0.1;
#P window linecount 1;
#P newex 399 268 37 9109513 s toVid;
#P newex 25 227 35 9109513 r toVid;
#P newex 376 21 31 9109513 r draz;
#P newex 396 64 63 9109513 speedlim 500;
#P newex 376 42 30 9109513 t b b;
#P newex 376 152 44 9109513 jit.matrix;
#P newex 387 178 162 9109513 jit.slide @slide_up 5. @slide_down 5.;
#P newex 399 224 38 9109513 t b l;
#P newex 399 202 40 9109513 jit.iter;
#P newex 396 85 88 9109513 jit.noise 3 float32 1;
#P newex 8 45 45 9109513 loadbang;
#P message 8 66 81 9109513 texture grid 64 64;
#P message 98 114 29 9109513 reset;
#P window linecount 2;
#P newex 98 133 95 9109513 jit.gl.handle quadr @inherit_transform 1;
#P newex 25 250 225 9109513 jit.gl.gridshape quadr @texture grid @color 1 1
1 0.2 @blend_enable 1 @shape cube @scale 0.2 0.5 0.5;
#P toggle 24 88 15 0;
#P window linecount 1;
#P newex 24 109 50 9109513 qmetro 5;
#P newex 53 154 33 9109513 s draz;
#P newex 24 132 71 9109513 t b b erase;
#P newex 24 201 73 9109513 jit.window quadr;
#P newex 24 179 160 9109513 jit.gl.render quadr @camera 0 5 0.01;
#P newex 399 246 96 9109513 pack position 0. 0. 0.;
#P connect 20 0 7 0;
#P connect 37 0 36 0;
#P connect 39 0 37 1;
#P connect 38 0 39 0;
#P fasten 15 0 28 0 392 328 229 328;
#P fasten 15 0 25 1 392 198 320 198;
#P connect 15 0 13 0;
#P connect 35 0 38 0;
#P connect 28 0 35 0;
#P connect 33 0 34 0;
#P connect 32 0 29 0;
#P fasten 32 1 30 0 474 517 507 517;
#P fasten 32 2 31 0 489 515 557 515;
#P connect 13 0 14 0;
#P fasten 27 0 16 0 401 149 381 149;
#P connect 26 0 27 0;
#P connect 12 0 26 0;
#P connect 14 1 0 1;
#P connect 18 0 12 0;
#P connect 17 1 18 0;
#P fasten 0 0 21 0 404 266 404 266;
#P connect 14 0 0 0;
#P fasten 17 0 24 0 381 126 275 126;
#P connect 17 0 16 0;
#P connect 19 0 17 0;
#P connect 25 0 23 0;
#P connect 24 0 25 0;
#P connect 9 0 8 0;
#P connect 3 1 4 0;
#P fasten 8 0 1 0 103 177 29 177;
#P connect 3 0 1 0;
#P fasten 3 2 1 0 89 175 29 175;
#P fasten 10 0 1 0 13 167 29 167;
#P connect 5 0 3 0;
#P connect 6 0 5 0;
#P connect 11 0 6 0;
#P connect 11 0 10 0;
#P connect 16 0 15 0;
#P window clipboard copycount 40;

On 9/30/07, Wesley Smith wrote:
>
> On 9/30/07, yair reshef wrote:
> > this is better, but its 2d, how do i convert Cartesian to polar in
> 3d?(!)
>
> http://local.wasp.uwa.edu.au/~pbourke/geometry/coords/
>
>
> wes
>

#113557
Sep 30, 2007 at 6:37pm

i switched the x and y at the atan2 formula,
i understand now there are only two values as roll is not given. i’ll find
another way to retrieve it. the working patch for posterity.

#P window setfont “Sans Serif” 9.;
#P window linecount 1;
#P message 335 437 84 9109513 rotatexyz 0. $1 $2;
#P newex 335 413 40 9109513 jit.iter;
#P newex 335 459 37 9109513 s toVid;
#P newex 335 386 135 9109513 jit.expr @expr in[0]*(57.29578);
#P message 480 543 167 9109513 -63.622017 48.621174 0.;
#P newex 480 520 57 9109513 prepend set;
#P newex 481 477 56 9109513 jit.unpack 3;
#P user jit.cellblock 579 497 627 518 139 9 1 1 45 17 0 1 1 0 0 0 0 0 1 0 0
0 255 255 255 0 0 0 0 0 0 191 191 191 0 0 0 215 215 240 1 1 1 0 4 0 0 0;
#P user jit.cellblock 529 497 577 518 139 9 1 1 45 17 0 1 1 0 0 0 0 0 1 0 0
0 255 255 255 0 0 0 0 0 0 191 191 191 0 0 0 215 215 240 1 1 1 0 4 0 0 0;
#P user jit.cellblock 481 497 529 518 139 9 1 1 45 17 0 1 1 0 0 0 0 0 1 0 0
0 255 255 255 0 0 0 0 0 0 191 191 191 0 0 0 215 215 240 1 1 1 0 4 0 0 0;
#P window linecount 2;
#P newex 335 349 266 9109513 jit.expr @expr
“atan(sqrt((pow(in[0].p[0]\,2)+pow(in[0].p[1]\,2))) / in[0].p[2])”
“atan2(in[0].p[1] \, in[0].p[0])” 0.;
#P window linecount 1;
#P newex 456 169 97 9109513 jit.op @op – @val 1.5;
#P newex 456 148 93 9109513 jit.op @op * @val 3.;
#P newex 330 245 55 9109513 jit.multiplex;
#P newex 330 214 92 9109513 jit.matrix 3 float32 1;
#P window linecount 3;
#P newex 330 272 87 9109513 jit.gl.mesh quadr @draw_mode lines @blend_enable
1;
#P window linecount 1;
#P newex 448 309 37 9109513 s toVid;
#P newex 85 268 35 9109513 r toVid;
#P newex 436 62 31 9109513 r draz;
#P newex 456 105 63 9109513 speedlim 500;
#P newex 436 83 30 9109513 t b b;
#P newex 436 193 44 9109513 jit.matrix;
#P newex 436 219 162 9109513 jit.slide @slide_up 5. @slide_down 5.;
#P newex 448 265 38 9109513 t b l;
#P newex 448 243 40 9109513 jit.iter;
#P newex 456 126 88 9109513 jit.noise 3 float32 1;
#P newex 68 86 45 9109513 loadbang;
#B color 4;
#P message 68 107 81 9109513 texture grid 64 64;
#P message 158 155 29 9109513 reset;
#P window linecount 2;
#P newex 158 174 95 9109513 jit.gl.handle quadr @inherit_transform 1;
#P newex 85 291 226 9109513 jit.gl.gridshape quadr @texture grid @color 1 1
1 0.2 @blend_enable 1 @shape cube @scale 0.5 0.5 0.05;
#P toggle 84 129 15 0;
#P window linecount 1;
#P newex 84 150 50 9109513 qmetro 5;
#P newex 113 195 33 9109513 s draz;
#P newex 84 173 71 9109513 t b b erase;
#P newex 84 242 73 9109513 jit.window quadr;
#P newex 84 220 147 9109513 jit.gl.render quadr @camera 0 0 5;
#P newex 448 287 96 9109513 pack position 0. 0. 0.;
#P comment 472 389 82 9109513 radians 2 degrees;
#P window linecount 2;
#P newex 85 341 130 9109513 jit.gl.gridshape quadr @shape sphere @scale 0.1
0.1 0.1;
#P fasten 12 0 3 0 73 208 89 208;
#P fasten 5 2 3 0 149 216 89 216;
#P connect 5 0 3 0;
#P fasten 10 0 3 0 163 218 89 218;
#P connect 13 0 12 0;
#P connect 13 0 8 0;
#P connect 8 0 7 0;
#P connect 7 0 5 0;
#P connect 22 0 9 0;
#P connect 5 1 6 0;
#P connect 11 0 10 0;
#P fasten 19 0 25 0 441 167 335 167;
#P connect 25 0 26 0;
#P connect 26 0 24 0;
#P fasten 17 0 29 0 441 326 340 326;
#P connect 29 0 36 0;
#P connect 36 0 38 0;
#P connect 38 0 39 0;
#P connect 39 0 37 0;
#P fasten 17 0 26 1 441 239 380 239;
#P connect 21 0 19 0;
#P connect 19 0 18 0;
#P fasten 28 0 18 0 461 190 441 190;
#P connect 18 0 17 0;
#P fasten 17 0 15 0 441 239 453 239;
#P connect 15 0 16 0;
#P connect 16 0 2 0;
#P fasten 2 0 23 0 453 307 453 307;
#P connect 19 1 20 0;
#P connect 20 0 14 0;
#P connect 14 0 27 0;
#P connect 27 0 28 0;
#P connect 16 1 2 1;
#P connect 34 0 35 0;
#P connect 33 0 30 0;
#P fasten 33 1 31 0 501 499 534 499;
#P fasten 33 2 32 0 516 497 584 497;
#P window clipboard copycount 40;

On 9/30/07, yair reshef wrote:
>
> thanks wes, the page you directed me is missing a formula to find the
> zenith(?) angle (probably me missing the point).
> i followed wikipedia on this, also switched from arctang to atan2. bu
> still no good, i still thnk i am missing an angle.
> http://en.wikipedia.org/wiki/Spherical_coordinates
>
> #P window setfont “Sans Serif” 9.;
> #P window linecount 1;
> #P message 224 466 45 9109513 $1 $2 0.;
> #B color 5;
> #P newex 224 442 40 9109513 jit.iter;
> #P newex 194 493 101 9109513 pak rotatexyz 0. 0. 0.;
> #P newex 196 518 37 9109513 s toVid;
> #P window setfont “Sans Serif” 14.;
> #P newex 224 403 222 9109518 jit.expr @expr “(in[0]*180.)/ 3.141″;
> #P window setfont “Sans Serif” 9.;
> #P message 453 561 154 9109513 81.863235 80.227272 1.677804;
> #P newex 453 538 57 9109513 prepend set;
> #P newex 454 495 56 9109513 jit.unpack 3;
> #P user jit.cellblock 552 515 600 536 139 9 1 1 45 17 0 1 1 0 0 0 0 0 1 0
> 0 0 255 255 255 0 0 0 0 0 0 191 191 191 0 0 0 215 215 240 1 1 1 0 4 0 0 0;
> #P user jit.cellblock 502 515 550 536 139 9 1 1 45 17 0 1 1 0 0 0 0 0 1 0
> 0 0 255 255 255 0 0 0 0 0 0 191 191 191 0 0 0 215 215 240 1 1 1 0 4 0 0 0;
> #P user jit.cellblock 454 515 502 536 139 9 1 1 45 17 0 1 1 0 0 0 0 0 1 0
> 0 0 255 255 255 0 0 0 0 0 0 191 191 191 0 0 0 215 215 240 1 1 1 0 4 0 0 0;
> #P window setfont “Sans Serif” 14.;
> #P window linecount 2;
> #P newex 224 354 374 9109518 jit.expr @expr
> “atan2((pow(in[0].p[0]\,2)+pow(in[0].p[1]\,2)) \, in[0].p[2])”
> “atan2(in[0].p[0]\, in[0].p[1])” in[0].p[2];
> #P window setfont “Sans Serif” 9.;
> #P window linecount 1;
> #P newex 396 128 92 9109513 jit.op @op – @val 1.;
> #P newex 396 107 93 9109513 jit.op @op * @val 2.;
> #P newex 270 204 55 9109513 jit.multiplex;
> #P newex 270 173 92 9109513 jit.matrix 3 float32 1;
> #P window linecount 3;
> #P newex 270 231 87 9109513 jit.gl.mesh quadr @draw_mode lines
> @blend_enable 1;
> #P window linecount 2;
> #P newex 25 300 130 9109513 jit.gl.gridshape quadr @shape sphere @scale
> 0.1 0.1 0.1 ;
> #P window linecount 1;
> #P newex 399 268 37 9109513 s toVid;
> #P newex 25 227 35 9109513 r toVid;
> #P newex 376 21 31 9109513 r draz;
> #P newex 396 64 63 9109513 speedlim 500;
> #P newex 376 42 30 9109513 t b b;
> #P newex 376 152 44 9109513 jit.matrix;
> #P newex 387 178 162 9109513 jit.slide @slide_up 5. @slide_down 5.;
> #P newex 399 224 38 9109513 t b l;
> #P newex 399 202 40 9109513 jit.iter;
> #P newex 396 85 88 9109513 jit.noise 3 float32 1;
> #P newex 8 45 45 9109513 loadbang;
> #P message 8 66 81 9109513 texture grid 64 64;
> #P message 98 114 29 9109513 reset;
> #P window linecount 2;
> #P newex 98 133 95 9109513 jit.gl.handle quadr @inherit_transform 1;
> #P newex 25 250 225 9109513 jit.gl.gridshape quadr @texture grid @color 1
> 1 1 0.2 @blend_enable 1 @shape cube @scale 0.2 0.5 0.5;
> #P toggle 24 88 15 0;
> #P window linecount 1;
> #P newex 24 109 50 9109513 qmetro 5;
> #P newex 53 154 33 9109513 s draz;
> #P newex 24 132 71 9109513 t b b erase;
> #P newex 24 201 73 9109513 jit.window quadr;
> #P newex 24 179 160 9109513 jit.gl.render quadr @camera 0 5 0.01;
> #P newex 399 246 96 9109513 pack position 0. 0. 0.;
> #P connect 20 0 7 0;
> #P connect 37 0 36 0;
> #P connect 39 0 37 1;
> #P connect 38 0 39 0;
> #P fasten 15 0 28 0 392 328 229 328;
> #P fasten 15 0 25 1 392 198 320 198;
> #P connect 15 0 13 0;
> #P connect 35 0 38 0;
> #P connect 28 0 35 0;
> #P connect 33 0 34 0;
> #P connect 32 0 29 0;
> #P fasten 32 1 30 0 474 517 507 517;
> #P fasten 32 2 31 0 489 515 557 515;
> #P connect 13 0 14 0;
> #P fasten 27 0 16 0 401 149 381 149;
> #P connect 26 0 27 0;
> #P connect 12 0 26 0;
> #P connect 14 1 0 1;
> #P connect 18 0 12 0;
> #P connect 17 1 18 0;
> #P fasten 0 0 21 0 404 266 404 266;
> #P connect 14 0 0 0;
> #P fasten 17 0 24 0 381 126 275 126;
> #P connect 17 0 16 0;
> #P connect 19 0 17 0;
> #P connect 25 0 23 0;
> #P connect 24 0 25 0;
> #P connect 9 0 8 0;
> #P connect 3 1 4 0;
> #P fasten 8 0 1 0 103 177 29 177;
> #P connect 3 0 1 0;
> #P fasten 3 2 1 0 89 175 29 175;
> #P fasten 10 0 1 0 13 167 29 167;
> #P connect 5 0 3 0;
> #P connect 6 0 5 0;
> #P connect 11 0 6 0;
> #P connect 11 0 10 0;
> #P connect 16 0 15 0;
> #P window clipboard copycount 40;
>
>
> On 9/30/07, Wesley Smith wrote:
> >
> > On 9/30/07, yair reshef wrote:
> > > this is better, but its 2d, how do i convert Cartesian to polar in
> > 3d?(!)
> >
> > http://local.wasp.uwa.edu.au/~pbourke/geometry/coords/< http://local.wasp.uwa.edu.au/%7Epbourke/geometry/coords/>
> >
> >
> > wes
> >
>
>

#113558
Sep 30, 2007 at 6:53pm

What are you after, Euler angles or “3D polar coordinates” which are
called Spherical coordinates?

wes

#113559
Sep 30, 2007 at 7:06pm

basically i am after rotating a number of planes around a center. keeping
them looking in the same direction. if i need math to do it, so be it.
i would now lke to apply this to the formulas supplied by andrew b. in my
shatter experiments, were i cannot use the rotatexyz (which is Euler if im
not wrong).

#P window setfont “Sans Serif” 9.;
#P window linecount 1;
#P newex 50 113 469 9109513 jit.expr @expr in[0]
“in[0].p[1]*cos(in[1])-in[0].p[2]*sin(in[1])”
“in[0].p[2]*cos(in[1])+in[0].p[1]*sin(in[1])” in[0] in[0];
#P newex 50 91 469 9109513 jit.expr @expr
“in[0].p[0]*cos(in[1])+in[0].p[2]*sin(in[1])” in[0]
“in[0].p[2]*cos(in[1])-in[0].p[0]*sin(in[1])” in[0] in[0];
#P newex 50 69 480 9109513 jit.expr @expr “in[0].p[0]*cos(in[1]) -
in[0].p[1]*sin(in[1])” “in[0].p[1]*cos(in[1]) + in[0].p[0]*sin(in[1])” in[0]
in[0] in[0];
#P connect 1 0 2 0;
#P connect 0 0 1 0;
#P window clipboard copycount 3;

here is an example of the effect with jit.gl.multiple

#P window setfont “Sans Serif” 9.;
#P window linecount 1;
#P message 440 55 18 9109513 22;
#N vpatcher 15 55 184 207;
#P outlet 67 100 15 0;
#P window setfont “Sans Serif” 9.;
#P message 67 75 68 9109513 fullscreen $1;
#P toggle 50 75 15 0;
#P newex 92 50 35 9109513 sel 27;
#P newex 50 50 40 9109513 key;
#P fasten 1 0 2 0 97 72 55 72;
#P fasten 2 0 3 0 66 90 66 75;
#P connect 3 0 4 0;
#P fasten 0 0 1 0 91 67 91 52;
#P pop;
#P newobj 0 184 25 9109513 p fs;
#P number 441 76 35 9 0 0 0 139 0 0 0 221 221 221 222 222 222 0 0 0;
#P message 441 96 36 9109513 dim $1;
#N vpatcher 15 55 209 203;
#P button 4 53 15 0;
#P inlet 3 26 15 0;
#P window setfont “Sans Serif” 9.;
#P window linecount 1;
#P newex 50 29 45 9109513 loadbang;
#P message 50 50 109 9109513 setall 0.2 0.2 0.05 , bang;
#P newex 50 73 92 9109513 jit.matrix 3 float32 3;
#P outlet 50 97 15 0;
#P connect 4 0 5 0;
#P connect 3 0 2 0;
#P connect 5 0 2 0;
#P connect 2 0 1 0;
#P connect 4 0 1 0;
#P connect 1 0 0 0;
#P pop 1;
#P newobj 577 273 38 9109513 p scale;
#P button 167 342 15 0;
#P newex 185 314 402 9109513 jit.gl.multiple quadr 3 @targetname fatPlane
@glparams position rotatexyz scale @texture grid;
#B color 5;
#P newex 326 273 135 9109513 jit.expr @expr in[0]*(57.29578);
#P window linecount 2;
#P newex 326 236 277 9109513 jit.expr @expr 0.
“atan(sqrt((pow(in[0].p[0]\,2)+pow(in[0].p[1]\,2))) / in[0].p[2])”
“atan2(in[0].p[1] \, in[0].p[0])”;
#P window linecount 1;
#P newex 327 153 97 9109513 jit.op @op – @val 1.5;
#P newex 327 132 93 9109513 jit.op @op * @val 3.;
#P newex 201 229 55 9109513 jit.multiplex;
#P newex 201 198 92 9109513 jit.matrix 3 float32 3;
#P window linecount 3;
#P newex 201 256 87 9109513 jit.gl.mesh quadr @draw_mode lines @blend_enable
1;
#P window linecount 1;
#P newex 307 46 31 9109513 r draz;
#P newex 327 89 68 9109513 speedlim 1500;
#P newex 307 67 30 9109513 t b b;
#P newex 307 177 44 9109513 jit.matrix;
#P newex 307 203 172 9109513 jit.slide @slide_up 15. @slide_down 15.;
#P newex 327 110 88 9109513 jit.noise 3 float32 3;
#P newex 13 28 45 9109513 loadbang;
#B color 4;
#P message 13 49 81 9109513 texture grid 64 64;
#P message 103 97 29 9109513 reset;
#P window linecount 2;
#P newex 103 116 95 9109513 jit.gl.handle quadr @inherit_transform 1;
#P newex 185 339 273 9109513 jit.gl.gridshape quadr @texture grid @color 1 1
1 0.2 @blend_enable 1 @shape cube @name fatPlane @automatic 0;
#P toggle 29 71 15 0;
#P window linecount 1;
#P newex 29 92 50 9109513 qmetro 5;
#P newex 58 137 33 9109513 s draz;
#P newex 29 115 71 9109513 t b b erase;
#P newex 29 184 124 9109513 jit.window quadr @floating 1;
#P newex 29 162 147 9109513 jit.gl.render quadr @camera 0 0 5;
#P comment 463 273 82 9109513 radians 2 degrees;
#P window linecount 2;
#P newex 13 230 130 9109513 jit.gl.gridshape quadr @shape sphere @scale 0.1
0.1 0.1;
#P connect 28 0 26 2;
#P connect 29 0 20 0;
#P connect 29 0 13 0;
#P connect 29 0 28 0;
#P connect 30 0 29 0;
#P connect 32 0 30 0;
#P connect 12 0 11 0;
#P connect 12 0 7 0;
#P fasten 12 0 32 0 18 51 445 51;
#P fasten 25 0 26 1 331 308 386 308;
#P connect 22 0 23 0;
#P connect 13 0 22 0;
#P connect 17 0 13 0;
#P connect 16 1 17 0;
#P connect 24 0 25 0;
#P fasten 14 0 26 0 312 308 190 308;
#P fasten 14 0 21 1 312 223 251 223;
#P fasten 14 0 24 0 312 229 331 229;
#P connect 15 0 14 0;
#P fasten 23 0 15 0 332 174 312 174;
#P fasten 16 0 20 0 312 151 206 151;
#P connect 16 0 15 0;
#P connect 18 0 16 0;
#P connect 21 0 19 0;
#P connect 20 0 21 0;
#P connect 27 0 8 0;
#P connect 10 0 9 0;
#P connect 4 1 5 0;
#P connect 31 0 3 0;
#P fasten 11 0 2 0 18 150 34 150;
#P fasten 4 2 2 0 94 158 34 158;
#P connect 4 0 2 0;
#P fasten 9 0 2 0 108 160 34 160;
#P connect 6 0 4 0;
#P connect 7 0 6 0;
#P window clipboard copycount 33;

On 9/30/07, Wesley Smith wrote:
>
> What are you after, Euler angles or “3D polar coordinates” which are
> called Spherical coordinates?
>
> wes
>

#113560
Sep 30, 2007 at 7:21pm

Euler angles don’t give you a unique orientation. Sometimes the
result can be ambiguous. For unambigues 3D orientations, you have to
use either axis-angle or quaternions.

That said, given a location and vector direction (velocity for
instance), you can derive an axis angle orientation. You take the
vector from the point you want to face to yor location. This forms a
triangle with your vector orientation. You then normalize both of
those vectors. Next, make a vector halfway between them by
subtracting one form the other and dividing in half. This will be
your axis. To find the angle, take the arcsine of the distance from
your orientation to your halfvector. I forget if you have to multiply
by 2 here or not, but that is the basic procedure.

wes

On 9/30/07, yair reshef wrote:
> basically i am after rotating a number of planes around a center. keeping
> them looking in the same direction. if i need math to do it, so be it.
> i would now lke to apply this to the formulas supplied by andrew b. in my
> shatter experiments, were i cannot use the rotatexyz (which is Euler if im
> not wrong).
>
> #P window setfont “Sans Serif” 9.;
> #P window linecount 1;
> #P newex 50 113 469 9109513 jit.expr @expr in[0]
> “in[0].p[1]*cos(in[1])-in[0].p[2]*sin(in[1])”
> “in[0].p[2]*cos(in[1])+in[0].p[1]*sin(in[1])” in[0] in[0];
> #P newex 50 91 469 9109513 jit.expr @expr
> “in[0].p[0]*cos(in[1])+in[0].p[2]*sin(in[1])” in[0]
> “in[0].p[2]*cos(in[1])-in[0].p[0]*sin(in[1])” in[0] in[0];
> #P newex 50 69 480 9109513 jit.expr @expr “in[0].p[0]*cos(in[1]) -
> in[0].p[1]*sin(in[1])” “in[0].p[1]*cos(in[1]) + in[0].p[0]*sin(in[1])” in[0]
> in[0] in[0];
> #P connect 1 0 2 0;
> #P connect 0 0 1 0;
> #P window clipboard copycount 3;
>
> here is an example of the effect with jit.gl.multiple
>
> #P window setfont “Sans Serif” 9.;
> #P window linecount 1;
> #P message 440 55 18 9109513 22;
> #N vpatcher 15 55 184 207;
> #P outlet 67 100 15 0;
> #P window setfont “Sans Serif” 9.;
> #P message 67 75 68 9109513 fullscreen $1;
> #P toggle 50 75 15 0;
> #P newex 92 50 35 9109513 sel 27;
> #P newex 50 50 40 9109513 key;
> #P fasten 1 0 2 0 97 72 55 72;
> #P fasten 2 0 3 0 66 90 66 75;
> #P connect 3 0 4 0;
> #P fasten 0 0 1 0 91 67 91 52;
> #P pop;
> #P newobj 0 184 25 9109513 p fs;
> #P number 441 76 35 9 0 0 0 139 0 0 0 221 221 221 222 222 222 0 0 0;
> #P message 441 96 36 9109513 dim $1;
> #N vpatcher 15 55 209 203;
> #P button 4 53 15 0;
> #P inlet 3 26 15 0;
> #P window setfont “Sans Serif” 9.;
> #P window linecount 1;
> #P newex 50 29 45 9109513 loadbang;
> #P message 50 50 109 9109513 setall 0.2 0.2 0.05 , bang;
> #P newex 50 73 92 9109513 jit.matrix 3 float32 3;
> #P outlet 50 97 15 0;
> #P connect 4 0 5 0;
> #P connect 3 0 2 0;
> #P connect 5 0 2 0;
> #P connect 2 0 1 0;
> #P connect 4 0 1 0;
> #P connect 1 0 0 0;
> #P pop 1;
> #P newobj 577 273 38 9109513 p scale;
> #P button 167 342 15 0;
> #P newex 185 314 402 9109513 jit.gl.multiple quadr 3 @targetname fatPlane
> @glparams position rotatexyz scale @texture grid;
> #B color 5;
> #P newex 326 273 135 9109513 jit.expr @expr in[0]*(57.29578);
> #P window linecount 2;
> #P newex 326 236 277 9109513 jit.expr @expr 0.
> “atan(sqrt((pow(in[0].p[0]\,2)+pow(in[0].p[1]\,2))) /
> in[0].p[2])” “atan2(in[0].p[1] \, in[0].p[0])”;
> #P window linecount 1;
> #P newex 327 153 97 9109513 jit.op @op – @val 1.5;
> #P newex 327 132 93 9109513 jit.op @op * @val 3.;
> #P newex 201 229 55 9109513 jit.multiplex;
> #P newex 201 198 92 9109513 jit.matrix 3 float32 3;
> #P window linecount 3;
> #P newex 201 256 87 9109513 jit.gl.mesh quadr @draw_mode lines @blend_enable
> 1;
> #P window linecount 1;
> #P newex 307 46 31 9109513 r draz;
> #P newex 327 89 68 9109513 speedlim 1500;
> #P newex 307 67 30 9109513 t b b;
> #P newex 307 177 44 9109513 jit.matrix;
> #P newex 307 203 172 9109513 jit.slide @slide_up 15. @slide_down 15.;
> #P newex 327 110 88 9109513 jit.noise 3 float32 3;
> #P newex 13 28 45 9109513 loadbang;
> #B color 4;
> #P message 13 49 81 9109513 texture grid 64 64;
> #P message 103 97 29 9109513 reset;
> #P window linecount 2;
> #P newex 103 116 95 9109513 jit.gl.handle quadr @inherit_transform 1;
> #P newex 185 339 273 9109513 jit.gl.gridshape quadr @texture grid @color 1 1
> 1 0.2 @blend_enable 1 @shape cube @name fatPlane @automatic 0;
> #P toggle 29 71 15 0;
> #P window linecount 1;
> #P newex 29 92 50 9109513 qmetro 5;
> #P newex 58 137 33 9109513 s draz;
> #P newex 29 115 71 9109513 t b b erase;
> #P newex 29 184 124 9109513 jit.window quadr @floating 1;
> #P newex 29 162 147 9109513 jit.gl.render quadr @camera 0 0 5;
> #P comment 463 273 82 9109513 radians 2 degrees;
> #P window linecount 2;
> #P newex 13 230 130 9109513 jit.gl.gridshape quadr @shape sphere @scale 0.1
> 0.1 0.1;
> #P connect 28 0 26 2;
> #P connect 29 0 20 0;
> #P connect 29 0 13 0;
> #P connect 29 0 28 0;
> #P connect 30 0 29 0;
> #P connect 32 0 30 0;
> #P connect 12 0 11 0;
> #P connect 12 0 7 0;
> #P fasten 12 0 32 0 18 51 445 51;
> #P fasten 25 0 26 1 331 308 386 308;
> #P connect 22 0 23 0;
> #P connect 13 0 22 0;
> #P connect 17 0 13 0;
> #P connect 16 1 17 0;
> #P connect 24 0 25 0;
> #P fasten 14 0 26 0 312 308 190 308;
> #P fasten 14 0 21 1 312 223 251 223;
> #P fasten 14 0 24 0 312 229 331 229;
> #P connect 15 0 14 0;
> #P fasten 23 0 15 0 332 174 312 174;
> #P fasten 16 0 20 0 312 151 206 151;
> #P connect 16 0 15 0;
> #P connect 18 0 16 0;
> #P connect 21 0 19 0;
> #P connect 20 0 21 0;
> #P connect 27 0 8 0;
> #P connect 10 0 9 0;
> #P connect 4 1 5 0;
> #P connect 31 0 3 0;
> #P fasten 11 0 2 0 18 150 34 150;
> #P fasten 4 2 2 0 94 158 34 158;
> #P connect 4 0 2 0;
> #P fasten 9 0 2 0 108 160 34 160;
> #P connect 6 0 4 0;
> #P connect 7 0 6 0;
> #P window clipboard copycount 33;
>
>
> On 9/30/07, Wesley Smith wrote:
> >
> > What are you after, Euler angles or “3D polar coordinates” which are
> > called Spherical coordinates?
> >
> > wes
> >
>
>
>
>

#113561
Sep 30, 2007 at 8:18pm

thank you wes, much appreciated

On 9/30/07, Wesley Smith wrote:
>
> Euler angles don’t give you a unique orientation. Sometimes the
> result can be ambiguous. For unambigues 3D orientations, you have to
> use either axis-angle or quaternions.
>
> That said, given a location and vector direction (velocity for
> instance), you can derive an axis angle orientation. You take the
> vector from the point you want to face to yor location. This forms a
> triangle with your vector orientation. You then normalize both of
> those vectors. Next, make a vector halfway between them by
> subtracting one form the other and dividing in half. This will be
> your axis. To find the angle, take the arcsine of the distance from
> your orientation to your halfvector. I forget if you have to multiply
> by 2 here or not, but that is the basic procedure.
>
> wes
>
>
>
> On 9/30/07, yair reshef wrote:
> > basically i am after rotating a number of planes around a center.
> keeping
> > them looking in the same direction. if i need math to do it, so be it.
> > i would now lke to apply this to the formulas supplied by andrew b. in
> my
> > shatter experiments, were i cannot use the rotatexyz (which is Euler if
> im
> > not wrong).
> >
> > #P window setfont “Sans Serif” 9.;
> > #P window linecount 1;
> > #P newex 50 113 469 9109513 jit.expr @expr in[0]
> > “in[0].p[1]*cos(in[1])-in[0].p[2]*sin(in[1])”
> > “in[0].p[2]*cos(in[1])+in[0].p[1]*sin(in[1])” in[0] in[0];
> > #P newex 50 91 469 9109513 jit.expr @expr
> > “in[0].p[0]*cos(in[1])+in[0].p[2]*sin(in[1])” in[0]
> > “in[0].p[2]*cos(in[1])-in[0].p[0]*sin(in[1])” in[0] in[0];
> > #P newex 50 69 480 9109513 jit.expr @expr “in[0].p[0]*cos(in[1]) -
> > in[0].p[1]*sin(in[1])” “in[0].p[1]*cos(in[1]) + in[0].p[0]*sin(in[1])”
> in[0]
> > in[0] in[0];
> > #P connect 1 0 2 0;
> > #P connect 0 0 1 0;
> > #P window clipboard copycount 3;
> >
> > here is an example of the effect with jit.gl.multiple
> >
> > #P window setfont “Sans Serif” 9.;
> > #P window linecount 1;
> > #P message 440 55 18 9109513 22;
> > #N vpatcher 15 55 184 207;
> > #P outlet 67 100 15 0;
> > #P window setfont “Sans Serif” 9.;
> > #P message 67 75 68 9109513 fullscreen $1;
> > #P toggle 50 75 15 0;
> > #P newex 92 50 35 9109513 sel 27;
> > #P newex 50 50 40 9109513 key;
> > #P fasten 1 0 2 0 97 72 55 72;
> > #P fasten 2 0 3 0 66 90 66 75;
> > #P connect 3 0 4 0;
> > #P fasten 0 0 1 0 91 67 91 52;
> > #P pop;
> > #P newobj 0 184 25 9109513 p fs;
> > #P number 441 76 35 9 0 0 0 139 0 0 0 221 221 221 222 222 222 0 0 0;
> > #P message 441 96 36 9109513 dim $1;
> > #N vpatcher 15 55 209 203;
> > #P button 4 53 15 0;
> > #P inlet 3 26 15 0;
> > #P window setfont “Sans Serif” 9.;
> > #P window linecount 1;
> > #P newex 50 29 45 9109513 loadbang;
> > #P message 50 50 109 9109513 setall 0.2 0.2 0.05 , bang;
> > #P newex 50 73 92 9109513 jit.matrix 3 float32 3;
> > #P outlet 50 97 15 0;
> > #P connect 4 0 5 0;
> > #P connect 3 0 2 0;
> > #P connect 5 0 2 0;
> > #P connect 2 0 1 0;
> > #P connect 4 0 1 0;
> > #P connect 1 0 0 0;
> > #P pop 1;
> > #P newobj 577 273 38 9109513 p scale;
> > #P button 167 342 15 0;
> > #P newex 185 314 402 9109513 jit.gl.multiple quadr 3 @targetname
> fatPlane
> > @glparams position rotatexyz scale @texture grid;
> > #B color 5;
> > #P newex 326 273 135 9109513 jit.expr @expr in[0]*(57.29578);
> > #P window linecount 2;
> > #P newex 326 236 277 9109513 jit.expr @expr 0.
> > “atan(sqrt((pow(in[0].p[0]\,2)+pow(in[0].p[1]\,2))) /
> > in[0].p[2])” “atan2(in[0].p[1] \, in[0].p[0])”;
> > #P window linecount 1;
> > #P newex 327 153 97 9109513 jit.op @op – @val 1.5;
> > #P newex 327 132 93 9109513 jit.op @op * @val 3.;
> > #P newex 201 229 55 9109513 jit.multiplex;
> > #P newex 201 198 92 9109513 jit.matrix 3 float32 3;
> > #P window linecount 3;
> > #P newex 201 256 87 9109513 jit.gl.mesh quadr @draw_mode lines
> @blend_enable
> > 1;
> > #P window linecount 1;
> > #P newex 307 46 31 9109513 r draz;
> > #P newex 327 89 68 9109513 speedlim 1500;
> > #P newex 307 67 30 9109513 t b b;
> > #P newex 307 177 44 9109513 jit.matrix;
> > #P newex 307 203 172 9109513 jit.slide @slide_up 15. @slide_down 15.;
> > #P newex 327 110 88 9109513 jit.noise 3 float32 3;
> > #P newex 13 28 45 9109513 loadbang;
> > #B color 4;
> > #P message 13 49 81 9109513 texture grid 64 64;
> > #P message 103 97 29 9109513 reset;
> > #P window linecount 2;
> > #P newex 103 116 95 9109513 jit.gl.handle quadr @inherit_transform 1;
> > #P newex 185 339 273 9109513 jit.gl.gridshape quadr @texture grid @color
> 1 1
> > 1 0.2 @blend_enable 1 @shape cube @name fatPlane @automatic 0;
> > #P toggle 29 71 15 0;
> > #P window linecount 1;
> > #P newex 29 92 50 9109513 qmetro 5;
> > #P newex 58 137 33 9109513 s draz;
> > #P newex 29 115 71 9109513 t b b erase;
> > #P newex 29 184 124 9109513 jit.window quadr @floating 1;
> > #P newex 29 162 147 9109513 jit.gl.render quadr @camera 0 0 5;
> > #P comment 463 273 82 9109513 radians 2 degrees;
> > #P window linecount 2;
> > #P newex 13 230 130 9109513 jit.gl.gridshape quadr @shape sphere @scale
> 0.1
> > 0.1 0.1;
> > #P connect 28 0 26 2;
> > #P connect 29 0 20 0;
> > #P connect 29 0 13 0;
> > #P connect 29 0 28 0;
> > #P connect 30 0 29 0;
> > #P connect 32 0 30 0;
> > #P connect 12 0 11 0;
> > #P connect 12 0 7 0;
> > #P fasten 12 0 32 0 18 51 445 51;
> > #P fasten 25 0 26 1 331 308 386 308;
> > #P connect 22 0 23 0;
> > #P connect 13 0 22 0;
> > #P connect 17 0 13 0;
> > #P connect 16 1 17 0;
> > #P connect 24 0 25 0;
> > #P fasten 14 0 26 0 312 308 190 308;
> > #P fasten 14 0 21 1 312 223 251 223;
> > #P fasten 14 0 24 0 312 229 331 229;
> > #P connect 15 0 14 0;
> > #P fasten 23 0 15 0 332 174 312 174;
> > #P fasten 16 0 20 0 312 151 206 151;
> > #P connect 16 0 15 0;
> > #P connect 18 0 16 0;
> > #P connect 21 0 19 0;
> > #P connect 20 0 21 0;
> > #P connect 27 0 8 0;
> > #P connect 10 0 9 0;
> > #P connect 4 1 5 0;
> > #P connect 31 0 3 0;
> > #P fasten 11 0 2 0 18 150 34 150;
> > #P fasten 4 2 2 0 94 158 34 158;
> > #P connect 4 0 2 0;
> > #P fasten 9 0 2 0 108 160 34 160;
> > #P connect 6 0 4 0;
> > #P connect 7 0 6 0;
> > #P window clipboard copycount 33;
> >
> >
> > On 9/30/07, Wesley Smith wrote:
> > >
> > > What are you after, Euler angles or “3D polar coordinates” which are
> > > called Spherical coordinates?
> > >
> > > wes
> > >
> >
> >
> >
> >
>

#113562
Feb 6, 2008 at 8:13pm

This is an old thread – but in case anyone’s interested, here’s a solution that keeps the gridshapes perpetually oriented to the world origin.

Zachary

max v2;
#N vpatcher 98 365 1066 797;
#P window setfont “Sans Serif” 9.;
#P newex 487 77 29 131137545 t b b;
#N vpatcher 506 218 940 486;
#P window setfont Geneva 9.;
#P window linecount 1;
#N vpatcher 10 59 798 620;
#P window setfont Geneva 9.;
#P window linecount 0;
#P newex 385 479 66 196617 pack 0. 0. 0.;
#P window setfont Geneva 10.;
#P window linecount 2;
#P comment 491 79 274 196618 angle is expresssed in pi-radians like cartopol object: 0 to pi and 0 to -pi;
#P window linecount 1;
#P comment 475 124 154 196618 -distance (vector magnitude);
#P comment 475 108 212 196618 -elevation (rotation relative to xz plane);
#P comment 475 63 244 196618 -azimuth (y-axis rotation);
#P window setfont Geneva 14.;
#P comment 475 31 273 196622 3D CARTESIAN TO POLAR CONVERSION;
#P window setfont Geneva 9.;
#P newex 616 293 131 196617 if $f2 >= 0 then 1. else -1.;
#P newex 155 190 27 196617 t f f;
#P newex 89 166 76 196617 unpack 0. 0. 0.;
#P newex 181 166 44 196617 zl nth 2;
#P newex 89 140 102 196617 t l l;
#N comlet z;
#P inlet 167 91 15 0;
#N comlet y;
#P inlet 128 91 15 0;
#N comlet x;
#P inlet 89 91 15 0;
#P newex 89 115 88 196617 pak 0. 0. 0.;
#P comment 445 396 176 196617 cos of theta = what angle in radians?;
#P newex 456 267 27 196617 t l l;
#P newex 413 420 29 196617 * 1.;
#P comment 418 445 131 196617 elevation (x-axis rotation);
#P comment 507 319 88 196617 vector magnitude;
#P newex 413 394 30 196617 acos;
#P newex 456 221 27 196617 t f f;
#P newex 456 244 49 196617 pak 0. 0.;
#P newex 456 317 48 196617 t b f f;
#P newex 413 345 27 196617 f;
#P newex 413 368 72 196617 expr $f1/$f2;
#P newex 456 293 151 196617 expr sqrt($f1*$f1 + $f2*$f2);
#P comment 502 370 63 196617 cos of theta;
#N comlet polar list , az el dist;
#P outlet 385 509 15 0;
#P comment 78 396 176 196617 cos of theta = what angle in radians?;
#P newex 89 267 27 196617 t l l;
#P newex 46 420 29 196617 * 1.;
#P newex 248 293 134 196617 if $f1 >= 0. then 1. else -1.;
#P comment 51 445 125 196617 azimuth (y-axis rotation);
#P comment 140 320 53 196617 amplitude;
#P newex 46 394 30 196617 acos;
#P newex 89 221 27 196617 t f f;
#P newex 89 244 49 196617 pak 0. 0.;
#P newex 89 317 48 196617 t b f f;
#P newex 46 345 27 196617 f;
#P newex 46 368 72 196617 expr $f1/$f2;
#P newex 89 293 151 196617 expr sqrt($f1*$f1 + $f2*$f2);
#P comment 135 370 63 196617 cos of theta;
#P comment 84 70 110 196617 all inputs cause output;
#P window setfont Geneva 12.;
#P window linecount 2;
#P comment 19 26 283 196620 this could be done using cartopol objects , but just to see how it’s done manually – here it is!;
#P user panel 15 22 291 43;
#X brgb 223 233 180;
#X frgb 0 0 0;
#X border 1;
#X rounded 0;
#X shadow 0;
#X done;
#P fasten 7 0 6 0 94 341 51 341;
#P connect 6 0 5 0;
#P connect 5 0 10 0;
#P connect 10 0 14 0;
#P connect 38 1 6 1;
#P lcolor 4;
#P fasten 13 0 14 1 253 414 70 414;
#P connect 32 0 31 0;
#P connect 31 0 35 0;
#P connect 35 0 37 0;
#P connect 37 0 9 0;
#P connect 9 0 8 0;
#P connect 8 0 15 0;
#P connect 15 0 4 0;
#P connect 4 0 7 0;
#P connect 7 1 5 1;
#P connect 33 0 31 1;
#P connect 38 0 8 1;
#P connect 37 2 38 0;
#P connect 34 0 31 2;
#P connect 35 1 36 0;
#P fasten 15 1 13 0 111 288 253 288;
#P fasten 14 0 45 0 51 467 390 467;
#P connect 45 0 17 0;
#P fasten 22 0 21 0 461 341 418 341;
#P connect 21 0 20 0;
#P connect 20 0 25 0;
#P connect 25 0 28 0;
#P connect 28 0 45 1;
#P connect 24 1 21 1;
#P lcolor 4;
#P fasten 39 0 28 1 621 415 437 415;
#P fasten 22 2 45 2 499 467 446 467;
#P lcolor 13;
#P fasten 7 2 24 0 132 341 395 341 395 213 461 213;
#P lcolor 13;
#P connect 24 0 23 0;
#P connect 23 0 29 0;
#P connect 29 0 19 0;
#P connect 19 0 22 0;
#P connect 22 1 20 1;
#P fasten 36 0 23 1 186 195 500 195;
#P fasten 29 1 39 0 478 288 621 288;
#P pop;
#P newobj 50 61 67 196617 p 3Dcartopol;
#P inlet 50 38 15 0;
#P window linecount 0;
#P newex 50 135 29 196617 t b f;
#P newex 50 176 109 196617 pak rotatexyz 0. 0. 0.;
#P newex 50 200 47 196617 s toVid2;
#P newex 208 135 34 196617 * -1.;
#P newex 208 112 155 196617 expr ($f1 / 3.1415926) * 180.;
#P newex 50 112 155 196617 expr ($f1 / 3.1415926) * 180.;
#P newex 50 87 326 196617 unpack 0. 0. 0.;
#P connect 7 0 8 0;
#P connect 8 0 0 0;
#P connect 0 0 1 0;
#P connect 1 0 6 0;
#P connect 6 0 5 0;
#P connect 5 0 4 0;
#P connect 3 0 5 1;
#P connect 6 1 5 2;
#P connect 0 1 2 0;
#P connect 2 0 3 0;
#P pop;
#P newobj 831 364 64 131137545 p rotateMesh;
#B color 12;
#P newex 781 154 44 131137545 gate 1 1;
#P newex 781 223 92 131137545 jit.op @op – @val 1.;
#P newex 781 202 93 131137545 jit.op @op * @val 2.;
#P newex 655 299 55 131137545 jit.multiplex;
#P newex 655 268 92 131137545 jit.matrix 3 float32 1;
#P window linecount 3;
#P newex 655 326 89 131137545 jit.gl.mesh quadr @draw_mode lines @blend_enable 1;
#P window linecount 1;
#P newex 773 363 44 131137545 s toVid2;
#P newex 781 121 69 131137545 speedlim 2000;
#P newex 761 99 30 131137545 t b b;
#P newex 761 247 44 131137545 jit.matrix;
#P newex 761 273 162 131137545 jit.slide @slide_up 5. @slide_down 5.;
#P newex 773 319 68 131137545 t b l l;
#P newex 773 297 40 131137545 jit.iter;
#P newex 781 180 88 131137545 jit.noise 3 float32 1;
#P newex 773 341 98 131137545 pack position 0. 0. 0.;
#P newex 89 257 42 131137545 r toVid2;
#P window linecount 2;
#P newex 89 280 293 131137545 jit.gl.gridshape quadr @color 1 1 1 0.2 @texture grid @blend_enable 1 @shape cube @lighting_enable 1 @scale 0.5 0.5 0.1;
#P window linecount 1;
#P message 58 217 68 131137545 fullscreen $1;
#P toggle 41 217 15 0;
#P newex 83 192 35 131137545 sel 27;
#P newex 41 192 40 131137545 key;
#N vpatcher 506 218 940 486;
#P window setfont Geneva 9.;
#P window linecount 1;
#N vpatcher 10 59 798 620;
#P window setfont Geneva 9.;
#P window linecount 0;
#P newex 385 479 66 196617 pack 0. 0. 0.;
#P window setfont Geneva 10.;
#P window linecount 2;
#P comment 275 83 274 196618 angle is expresssed in pi-radians like cartopol object: 0 to pi and 0 to -pi;
#P window linecount 1;
#P comment 259 128 154 196618 -distance (vector magnitude);
#P comment 259 112 212 196618 -elevation (rotation relative to xz plane);
#P comment 259 67 244 196618 -azimuth (y-axis rotation);
#P window setfont Geneva 14.;
#P comment 259 35 273 196622 3D CARTESIAN TO POLAR CONVERSION;
#P window setfont Geneva 9.;
#P newex 616 293 131 196617 if $f2 >= 0 then 1. else -1.;
#P newex 155 190 27 196617 t f f;
#P newex 89 166 76 196617 unpack 0. 0. 0.;
#P newex 181 166 44 196617 zl nth 2;
#P newex 89 140 102 196617 t l l;
#N comlet z;
#P inlet 167 91 15 0;
#N comlet y;
#P inlet 128 91 15 0;
#N comlet x;
#P inlet 89 91 15 0;
#P newex 89 115 88 196617 pak 0. 0. 0.;
#P comment 445 396 176 196617 cos of theta = what angle in radians?;
#P newex 456 267 27 196617 t l l;
#P newex 413 420 29 196617 * 1.;
#P comment 418 445 131 196617 elevation (x-axis rotation);
#P comment 507 319 88 196617 vector magnitude;
#P newex 413 394 30 196617 acos;
#P newex 456 221 27 196617 t f f;
#P newex 456 244 49 196617 pak 0. 0.;
#P newex 456 317 48 196617 t b f f;
#P newex 413 345 27 196617 f;
#P newex 413 368 72 196617 expr $f1/$f2;
#P newex 456 293 151 196617 expr sqrt($f1*$f1 + $f2*$f2);
#P comment 502 370 63 196617 cos of theta;
#N comlet polar list , az el dist;
#P outlet 385 509 15 0;
#P comment 78 396 176 196617 cos of theta = what angle in radians?;
#P newex 89 267 27 196617 t l l;
#P newex 46 420 29 196617 * 1.;
#P newex 248 293 134 196617 if $f1 >= 0. then 1. else -1.;
#P comment 51 445 125 196617 azimuth (y-axis rotation);
#P comment 140 320 53 196617 amplitude;
#P newex 46 394 30 196617 acos;
#P newex 89 221 27 196617 t f f;
#P newex 89 244 49 196617 pak 0. 0.;
#P newex 89 317 48 196617 t b f f;
#P newex 46 345 27 196617 f;
#P newex 46 368 72 196617 expr $f1/$f2;
#P newex 89 293 151 196617 expr sqrt($f1*$f1 + $f2*$f2);
#P comment 135 370 63 196617 cos of theta;
#P comment 84 70 110 196617 all inputs cause output;
#P fasten 5 0 4 0 94 341 51 341;
#P connect 4 0 3 0;
#P connect 3 0 8 0;
#P connect 8 0 12 0;
#P connect 36 1 4 1;
#P lcolor 4;
#P fasten 11 0 12 1 253 414 70 414;
#P connect 30 0 29 0;
#P connect 29 0 33 0;
#P connect 33 0 35 0;
#P connect 35 0 7 0;
#P connect 7 0 6 0;
#P connect 6 0 13 0;
#P connect 13 0 2 0;
#P connect 2 0 5 0;
#P connect 5 1 3 1;
#P connect 31 0 29 1;
#P connect 36 0 6 1;
#P connect 35 2 36 0;
#P connect 32 0 29 2;
#P connect 33 1 34 0;
#P fasten 13 1 11 0 111 288 253 288;
#P fasten 12 0 43 0 51 467 390 467;
#P connect 43 0 15 0;
#P fasten 20 0 19 0 461 341 418 341;
#P connect 19 0 18 0;
#P connect 18 0 23 0;
#P connect 23 0 26 0;
#P connect 26 0 43 1;
#P connect 22 1 19 1;
#P lcolor 4;
#P fasten 37 0 26 1 621 415 437 415;
#P fasten 20 2 43 2 499 467 446 467;
#P lcolor 13;
#P fasten 5 2 22 0 132 341 395 341 395 213 461 213;
#P lcolor 13;
#P connect 22 0 21 0;
#P connect 21 0 27 0;
#P connect 27 0 17 0;
#P connect 17 0 20 0;
#P connect 20 1 18 1;
#P fasten 34 0 21 1 186 195 500 195;
#P fasten 27 1 37 0 478 288 621 288;
#P pop;
#P newobj 50 61 67 196617 p 3Dcartopol;
#P inlet 50 38 15 0;
#P window linecount 0;
#P newex 50 135 29 196617 t b f;
#P newex 50 176 109 196617 pak rotatexyz 0. 0. 0.;
#P newex 50 200 41 196617 s toVid;
#P newex 208 135 34 196617 * -1.;
#P newex 208 112 155 196617 expr ($f1 / 3.1415926) * 180.;
#P newex 50 112 155 196617 expr ($f1 / 3.1415926) * 180.;
#P newex 50 87 326 196617 unpack 0. 0. 0.;
#P connect 7 0 8 0;
#P connect 8 0 0 0;
#P connect 0 0 1 0;
#P connect 1 0 6 0;
#P connect 6 0 5 0;
#P connect 5 0 4 0;
#P connect 3 0 5 1;
#P connect 6 1 5 2;
#P connect 0 1 2 0;
#P connect 2 0 3 0;
#P pop;
#P newobj 557 367 64 131137545 p rotateMesh;
#B color 12;
#P newex 507 157 44 131137545 gate 1 1;
#P toggle 487 23 15 0;
#P newex 487 52 44 131137545 gate 1 1;
#P newex 507 226 92 131137545 jit.op @op – @val 1.;
#P newex 507 205 93 131137545 jit.op @op * @val 2.;
#P newex 381 302 55 131137545 jit.multiplex;
#P newex 381 271 92 131137545 jit.matrix 3 float32 1;
#P window linecount 3;
#P newex 381 329 89 131137545 jit.gl.mesh quadr @draw_mode lines @blend_enable 1;
#P window linecount 1;
#P newex 41 348 327 131137545 jit.gl.gridshape quadr @shape sphere @scale 0.1 0.1 0.1 @lighting_enable 1;
#P newex 499 366 37 131137545 s toVid;
#P newex 41 295 35 131137545 r toVid;
#P newex 521 29 31 131137545 r draz;
#P newex 507 124 69 131137545 speedlim 3000;
#P newex 487 102 30 131137545 t b b;
#P newex 487 250 44 131137545 jit.matrix;
#P newex 487 276 162 131137545 jit.slide @slide_up 5. @slide_down 5.;
#P newex 499 322 68 131137545 t b l l;
#P newex 499 300 40 131137545 jit.iter;
#P newex 507 183 88 131137545 jit.noise 3 float32 1;
#P newex 25 35 45 131137545 loadbang;
#P message 25 56 81 131137545 texture grid 64 64;
#P message 115 104 29 131137545 reset;
#P window linecount 2;
#P newex 115 123 95 131137545 jit.gl.handle quadr @inherit_transform 1;
#P newex 41 318 293 131137545 jit.gl.gridshape quadr @color 1 1 1 0.2 @texture grid @blend_enable 1 @shape cube @lighting_enable 1 @scale 0.5 0.5 0.1;
#P toggle 41 78 15 0;
#P window linecount 1;
#P newex 41 99 50 131137545 qmetro 5;
#P newex 71 145 33 131137545 s draz;
#P newex 41 122 71 131137545 t b b erase;
#P newex 58 238 142 131137545 jit.window quadr @depthbuffer 1;
#P newex 41 169 188 131137545 jit.gl.render quadr @camera 0 0 5 @axes 1;
#P newex 499 344 98 131137545 pack position 0. 0. 0.;
#P connect 11 0 10 0;
#P connect 11 0 6 0;
#P connect 6 0 5 0;
#P connect 5 0 3 0;
#P fasten 8 0 1 0 120 167 46 167;
#P connect 3 0 1 0;
#P fasten 3 2 1 0 106 165 46 165;
#P fasten 10 0 1 0 30 157 46 157;
#P fasten 33 0 34 0 88 214 46 214;
#P connect 20 0 7 0;
#P fasten 34 0 35 0 57 232 57 217;
#P connect 35 0 2 0;
#P connect 3 1 4 0;
#P fasten 32 0 33 0 82 209 82 194;
#P connect 37 0 36 0;
#P connect 9 0 8 0;
#P fasten 17 0 24 0 492 224 386 224;
#P connect 24 0 25 0;
#P connect 25 0 23 0;
#P fasten 15 0 25 1 492 296 431 296;
#P connect 29 0 28 0;
#P connect 28 0 54 0;
#P connect 54 0 17 0;
#P fasten 27 0 16 0 512 247 492 247;
#P connect 17 0 16 0;
#P connect 16 0 15 0;
#P connect 15 0 13 0;
#P connect 13 0 14 0;
#P connect 14 0 0 0;
#P fasten 0 0 21 0 504 364 504 364;
#P connect 17 1 18 0;
#P connect 29 0 30 0;
#P lcolor 4;
#P connect 30 0 12 0;
#P connect 12 0 26 0;
#P connect 26 0 27 0;
#P connect 19 0 28 1;
#P connect 14 1 0 1;
#P fasten 18 0 30 1 512 148 546 148;
#P connect 14 2 31 0;
#P fasten 44 0 48 0 766 221 660 221;
#P connect 48 0 49 0;
#P connect 49 0 47 0;
#P fasten 42 0 49 1 766 293 705 293;
#P fasten 54 1 44 0 511 96 766 96;
#P fasten 51 0 43 0 786 244 766 244;
#P connect 44 0 43 0;
#P connect 43 0 42 0;
#P connect 42 0 40 0;
#P connect 40 0 41 0;
#P connect 41 0 38 0;
#P fasten 38 0 46 0 778 361 778 361;
#P connect 44 1 45 0;
#P connect 29 0 52 0;
#P lcolor 4;
#P connect 52 0 39 0;
#P connect 39 0 50 0;
#P connect 50 0 51 0;
#P connect 41 1 38 1;
#P fasten 45 0 52 1 786 145 820 145;
#P connect 41 2 53 0;
#P pop;

#113563

You must be logged in to reply to this topic.