Nullsoft AVS Preset 0.2REAL 3D ROTATION ALGORITHM (3D CIRCLE calculation) http://avs.chat.ru/sphere3d.htm http://avs.chat.ru/sphere3d.avs 3D SPHERE http://avsmmp.deviantart.com http://avsmmp.ru.tc http://avs.ru.tc http://avs.chat.ru l>VFX FRAMERATE LIMITER($5fi= fp + i*2*pi; x=xr+rc*(cos(fi)*cos(omega)*cos(tetta)-sin(fi)*sin(omega)); y=yr+rc*(cos(fi)*sin(omega)*cos(tetta)+sin(fi)*cos(omega)); z=zr+rc*(cos(fi)*sin(tetta)); light=(1+ z )/2*(1-i); red=light; green=light; blue=0; // red=(1-i); green=(1-i); blue=(1-i); x=x*h/w; // x=2*i-1; y= z ;?zn= 0.05 ; xn = getkbmouse(1)*km; yn = getkbmouse(2)*km; // zn= 0.6 ; xn= 0.601 ; yn= 0.6 ; // CROSSING PLANE CALCULATION // rs = sqrt(xp*xp+yp*yp+zp*zp); mu = 1/sqrt(xn*xn+yn*yn+zn*zn); nx = xn*mu; ny = yn*mu; nz = zn*mu; pc = xp*nx + yp*ny + zp*nz; xr = pc*nx; yr = pc*ny; zr = pc*nz; rc = sqrt(rs*rs - pc*pc); tetta = - acos(nz); omega = atan2(ny,nx); // (1) INPUT POINT (fi=fp) CALCULATION // rc|=0 (!) // rj|=0 (!) xi=xr+rc*cos(omega)*cos(tetta); yi=yr+rc*sin(omega)*cos(tetta); zi=zr+rc*sin(tetta); ip = ((xp-xr)*(xi-xr)+(yp-yr)*(yi-yr)+(zp-zr)*(zi-zr))/rc; xj = (yi-yr)*zn-(zi-zr)*yn; yj=(zi-zr)*xn-(xi-xr)*zn; zj=(xi-xr)*yn-(yi-yr)*xn; rj = sqrt(xj*xj+yj*yj+zj*zj); jp = ((xp-xr)*xj + (yp-yr)*yj + (zp-zr)*zj)/rj; fp = - atan2(jp,ip); // (2) INPUT POINT (fi=fp) ITERATION // k=0; loop(360, assign(fi,k*2*pi/360)+ assign(x, xr+rc*(cos(fi)*cos(omega)*cos(tetta)-sin(fi)*sin(omega)) )+ assign(y, yr+rc*(cos(fi)*sin(omega)*cos(tetta)+sin(fi)*cos(omega)) )+ assign(fp, if( band(below(abs(x-xp),0.009),below(abs(y-yp),0.009)) , fi , fp) )+ assign(k,k+1) ); reg00= fp*deg ; reg04= omega*deg; reg05= tetta*deg ; reg08= rc; reg09= pc; reg01= xn ; reg02= yn ; reg03= zn ; reg11= xi-xr ; reg12= yi-yr ; reg13= zi-xr ; reg21= xj ; reg22= yj ; reg23= zj ; reg31= xr ; reg32= yr ; reg33= zr ;n=36; km=1; kd=0/33; switch=1; rq=0.5; ki=1; xp= -0.5; yp= -0.5; zp= 0.5; // rs = 0.87; pi=$PI; piw=2*$PI; deg=180/$PI; $5fi= fp + i*2*pi; x=xr+rc*(cos(fi)*cos(omega)*cos(tetta)-sin(fi)*sin(omega)); y=yr+rc*(cos(fi)*sin(omega)*cos(tetta)+sin(fi)*cos(omega)); z=zr+rc*(cos(fi)*sin(tetta)); light=(1+ z )/2*(1-i); red=light; green=light; blue=0; // red=(1-i); green=(1-i); blue=(1-i); x=x*h/w; // x=2*i-1; y= z ;?zn= 0.05 ; xn = getkbmouse(1)*km; yn = getkbmouse(2)*km; // zn= 0.6 ; xn= 0.601 ; yn= 0.6 ; // CROSSING PLANE CALCULATION // rs = sqrt(xp*xp+yp*yp+zp*zp); mu = 1/sqrt(xn*xn+yn*yn+zn*zn); nx = xn*mu; ny = yn*mu; nz = zn*mu; pc = xp*nx + yp*ny + zp*nz; xr = pc*nx; yr = pc*ny; zr = pc*nz; rc = sqrt(rs*rs - pc*pc); tetta = - acos(nz); omega = atan2(ny,nx); // (1) INPUT POINT (fi=fp) CALCULATION // rc|=0 (!) // rj|=0 (!) xi=xr+rc*cos(omega)*cos(tetta); yi=yr+rc*sin(omega)*cos(tetta); zi=zr+rc*sin(tetta); ip = ((xp-xr)*(xi-xr)+(yp-yr)*(yi-yr)+(zp-zr)*(zi-zr))/rc; xj = (yi-yr)*zn-(zi-zr)*yn; yj=(zi-zr)*xn-(xi-xr)*zn; zj=(xi-xr)*yn-(yi-yr)*xn; rj = sqrt(xj*xj+yj*yj+zj*zj); jp = ((xp-xr)*xj + (yp-yr)*yj + (zp-zr)*zj)/rj; fp = - atan2(jp,ip); // (2) INPUT POINT (fi=fp) ITERATION // k=0; loop(360, assign(fi,k*2*pi/360)+ assign(x, xr+rc*(cos(fi)*cos(omega)*cos(tetta)-sin(fi)*sin(omega)) )+ assign(y, yr+rc*(cos(fi)*sin(omega)*cos(tetta)+sin(fi)*cos(omega)) )+ assign(fp, if( band(below(abs(x-xp),0.009),below(abs(y-yp),0.009)) , fi , fp) )+ assign(k,k+1) ); reg00= fp*deg ; reg04= omega*deg; reg05= tetta*deg ; reg08= rc; reg09= pc; reg01= xn ; reg02= yn ; reg03= zn ; reg11= xi-xr ; reg12= yi-yr ; reg13= zi-xr ; reg21= xj ; reg22= yj ; reg23= zj ; reg31= xr ; reg32= yr ; reg33= zr ;n=36; km=1; kd=0/33; switch=1; rq=0.5; ki=1; xp= -0.5; yp= 0.5; zp= 0.5; // rs = 0.87; pi=$PI; piw=2*$PI; deg=180/$PI; $5fi= fp + i*2*pi; x=xr+rc*(cos(fi)*cos(omega)*cos(tetta)-sin(fi)*sin(omega)); y=yr+rc*(cos(fi)*sin(omega)*cos(tetta)+sin(fi)*cos(omega)); z=zr+rc*(cos(fi)*sin(tetta)); light=(1+ z )/2*(1-i); red=light; green=light; blue=0; // red=(1-i); green=(1-i); blue=(1-i); x=x*h/w; // x=2*i-1; y= z ;?zn= 0.05 ; xn = getkbmouse(1)*km; yn = getkbmouse(2)*km; // zn= 0.6 ; xn= 0.601 ; yn= 0.6 ; // CROSSING PLANE CALCULATION // rs = sqrt(xp*xp+yp*yp+zp*zp); mu = 1/sqrt(xn*xn+yn*yn+zn*zn); nx = xn*mu; ny = yn*mu; nz = zn*mu; pc = xp*nx + yp*ny + zp*nz; xr = pc*nx; yr = pc*ny; zr = pc*nz; rc = sqrt(rs*rs - pc*pc); tetta = - acos(nz); omega = atan2(ny,nx); // (1) INPUT POINT (fi=fp) CALCULATION // rc|=0 (!) // rj|=0 (!) xi=xr+rc*cos(omega)*cos(tetta); yi=yr+rc*sin(omega)*cos(tetta); zi=zr+rc*sin(tetta); ip = ((xp-xr)*(xi-xr)+(yp-yr)*(yi-yr)+(zp-zr)*(zi-zr))/rc; xj = (yi-yr)*zn-(zi-zr)*yn; yj=(zi-zr)*xn-(xi-xr)*zn; zj=(xi-xr)*yn-(yi-yr)*xn; rj = sqrt(xj*xj+yj*yj+zj*zj); jp = ((xp-xr)*xj + (yp-yr)*yj + (zp-zr)*zj)/rj; fp = - atan2(jp,ip); // (2) INPUT POINT (fi=fp) ITERATION // k=0; loop(360, assign(fi,k*2*pi/360)+ assign(x, xr+rc*(cos(fi)*cos(omega)*cos(tetta)-sin(fi)*sin(omega)) )+ assign(y, yr+rc*(cos(fi)*sin(omega)*cos(tetta)+sin(fi)*cos(omega)) )+ assign(fp, if( band(below(abs(x-xp),0.009),below(abs(y-yp),0.009)) , fi , fp) )+ assign(k,k+1) ); reg00= fp*deg ; reg04= omega*deg; reg05= tetta*deg ; reg08= rc; reg09= pc; reg01= xn ; reg02= yn ; reg03= zn ; reg11= xi-xr ; reg12= yi-yr ; reg13= zi-xr ; reg21= xj ; reg22= yj ; reg23= zj ; reg31= xr ; reg32= yr ; reg33= zr ;n=36; km=1; kd=0/33; switch=1; rq=0.5; ki=1; xp= 0.5; yp= -0.5; zp= 0.5; // rs = 0.87; pi=$PI; piw=2*$PI; deg=180/$PI; $5fi= fp + i*2*pi; x=xr+rc*(cos(fi)*cos(omega)*cos(tetta)-sin(fi)*sin(omega)); y=yr+rc*(cos(fi)*sin(omega)*cos(tetta)+sin(fi)*cos(omega)); z=zr+rc*(cos(fi)*sin(tetta)); light=(1+ z )/2*(1-i); red=light; green=light; blue=0; // red=(1-i); green=(1-i); blue=(1-i); x=x*h/w; // x=2*i-1; y= z ;?zn= 0.05 ; xn = getkbmouse(1)*km; yn = getkbmouse(2)*km; // zn= 0.6 ; xn= 0.601 ; yn= 0.6 ; // CROSSING PLANE CALCULATION // rs = sqrt(xp*xp+yp*yp+zp*zp); mu = 1/sqrt(xn*xn+yn*yn+zn*zn); nx = xn*mu; ny = yn*mu; nz = zn*mu; pc = xp*nx + yp*ny + zp*nz; xr = pc*nx; yr = pc*ny; zr = pc*nz; rc = sqrt(rs*rs - pc*pc); tetta = - acos(nz); omega = atan2(ny,nx); // (1) INPUT POINT (fi=fp) CALCULATION // rc|=0 (!) // rj|=0 (!) xi=xr+rc*cos(omega)*cos(tetta); yi=yr+rc*sin(omega)*cos(tetta); zi=zr+rc*sin(tetta); ip = ((xp-xr)*(xi-xr)+(yp-yr)*(yi-yr)+(zp-zr)*(zi-zr))/rc; xj = (yi-yr)*zn-(zi-zr)*yn; yj=(zi-zr)*xn-(xi-xr)*zn; zj=(xi-xr)*yn-(yi-yr)*xn; rj = sqrt(xj*xj+yj*yj+zj*zj); jp = ((xp-xr)*xj + (yp-yr)*yj + (zp-zr)*zj)/rj; fp = - atan2(jp,ip); // (2) INPUT POINT (fi=fp) ITERATION // k=0; loop(360, assign(fi,k*2*pi/360)+ assign(x, xr+rc*(cos(fi)*cos(omega)*cos(tetta)-sin(fi)*sin(omega)) )+ assign(y, yr+rc*(cos(fi)*sin(omega)*cos(tetta)+sin(fi)*cos(omega)) )+ assign(fp, if( band(below(abs(x-xp),0.009),below(abs(y-yp),0.009)) , fi , fp) )+ assign(k,k+1) ); reg00= fp*deg ; reg04= omega*deg; reg05= tetta*deg ; reg08= rc; reg09= pc; reg01= xn ; reg02= yn ; reg03= zn ; reg11= xi-xr ; reg12= yi-yr ; reg13= zi-xr ; reg21= xj ; reg22= yj ; reg23= zj ; reg31= xr ; reg32= yr ; reg33= zr ;~n=36; km=1; kd=0/33; switch=1; rq=0.5; ki=1; xp= 0.5; yp= 0.5; zp= 0.5; // rs = 0.87; pi=$PI; piw=2*$PI; deg=180/$PI; 9$@AVS 2.8+ Effect List Config // $ixi = reg11; yi = reg12; x=reg31+i*xi ; y=reg32+i*yi ; x=x*h/w; red=0; green=0; blue=(i-0.1); !// In=44; deg=180/$PI;$xj = reg21; yj = reg22; x=reg31+i*xj ; y=reg32+i*yj ; x=i*xj ; y=i*yj ; x=x*h/w; red=(i-0.1); green=(i-0.1); blue=(i-0.1); !// Jn=44; deg=180/$PI;$w// xn = getkbmouse(1); yn = getkbmouse(2); x=i*reg01 ; y=i*reg02 ; x=x*h/w; red=(i+0.1); green=0; blue=0;// Nn=44; deg=180/$PI;<0Atetta = $(reg05:1.0)< Adelta=$(reg43:1.1)<Afc=$(reg41:1.0)<H4Afp=$(reg00:1.1)<`4Aomega = $(reg04:1.0)$@AVS 2.8+ Effect List Config*// o$@AVS 2.8+ Effect List Config // I@<4Axi=$(reg11:1.1)@<XAyi=$(reg12:1.1)@<Azi=$(reg13:1.1)+n=x = x - (reg31+reg11) * 1.3 ; y = y - (reg32+reg12) * 1.3 ;c$@AVS 2.8+ Effect List Config // J<)Axj=$(reg21:1.1)<0,Ayj=$(reg22:1.1)<.Azj=$(reg23:1.1)+b1x = x - (reg21) * 1.1 ; y = y - (reg22) * 1.1 ;S$@AVS 2.8+ Effect List Config // N<p;Axn=$(reg01:1.2)<>Ayn=$(reg02:1.2)<@Azn=$(reg03:1.2)+R!x = x - reg01 ; y = y - reg02 ;@< IAxr=$(reg31:1.1)@<KAyr=$(reg32:1.1)<PNArc=$(reg08:1.7)@<PAzr=$(reg33:1.1)<SApc=$(reg09:1.2)$@AVS 2.8+ Effect List Config// $x=rq*(+equal(ki,1)-equal(ki,2)-equal(ki,3)+equal(ki,4)+equal(ki,5)); y=rq*(+equal(ki,1)+equal(ki,2)-equal(ki,3)-equal(ki,4)+equal(ki,5)); z=0; ki=ki+1; x=x*h/w; ki=1; // n=5; rq=0.5; (($R#y= 2*i-1; x= -0.0 ; x=x*h/w; // Yn=2; $Cx=2*i-1; y= -0.0 ; // Xn=2; $kzt=(i*2-1)*r; rt=sqrt(r*r-zt*zt); fi=fi+dfi; xt=rt*cos(fi); yt=rt*sin(fi); // 3D ROTATION MATRIX zry=zt*cry-xt*sry; xry=zt*sry+xt*cry; xt=xry; zt=zry; yrx=yt*crx-zt*srx; zrx=yt*srx+zt*crx; yt=yrx; zt=zrx; xrz=xt*crz-yt*srz; yrz=xt*srz+yt*crz; xt=xrz; yt=yrz; // LIGHT light=1+zt/r; red=0; green=0; blue=i+0.4; blue=light; x=xt; y=yt; x=x*h/w; // ROTATION rx=-pi*getkbmouse(2); ry=pi*getkbmouse(1); // rx=rx+0.01; ry=ry+0.01; rz=rz+0.0; rx=if(above(abs(rx),piw),0,rx); ry=if(above(abs(ry),piw),0,ry); crx=cos(rx); srx=sin(rx); cry=cos(ry); sry=sin(ry); crz=cos(rz); srz=sin(rz); fi=0;4// sphere (euler) - // x^2 + y^2 + z^2 = r^23n=3600; pi=$PI; piw=2*$PI; dfi=piw/n*36; r=0.87;