diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 84da08d7b7fcda12c85caeb5a10b4903770a6f69 (patch) | |
tree | 2a6aea76f2dfffb4cc04bb907c4725af94f70e72 /noatun-plugins/tyler/compute.c | |
download | tdeaddons-84da08d7b7fcda12c85caeb5a10b4903770a6f69.tar.gz tdeaddons-84da08d7b7fcda12c85caeb5a10b4903770a6f69.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdeaddons@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'noatun-plugins/tyler/compute.c')
-rw-r--r-- | noatun-plugins/tyler/compute.c | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/noatun-plugins/tyler/compute.c b/noatun-plugins/tyler/compute.c new file mode 100644 index 0000000..78d6f90 --- /dev/null +++ b/noatun-plugins/tyler/compute.c @@ -0,0 +1,188 @@ +/* +// Copyright (C) 2000 Julien Carme +// Copyright (C) 2001 Neil Stevens <[email protected]> +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2, as +// published by the Free Software Foundation. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include <math.h> +#include "renderer.h" +#include "compute.h" + +#define PI 3.14159 + +t_complex fct(t_complex a,int n,int p1,int p2) /*p1 et p2:0-4 */ +{ + t_complex b; + float fact; + float an; + float circle_size; + float speed; + float co,si; + + a.x-=scr_par.width/2; + a.y-=scr_par.height/2; + + switch (n) { + + case 0: + an=0.025*(p1-2)+0.002; + co=cos(an); + si=sin(an); + circle_size=scr_par.height*0.25; + speed=2000+p2*500; + b.x=(co*a.x-si*a.y); + b.y=(si*a.x+co*a.y); + fact=-(sqrt(b.x*b.x+b.y*b.y)-circle_size)/speed+1; + b.x=(b.x*fact); + b.y=(b.y*fact); + break; + + case 1: + an=0.015*(p1-2)+0.002; + co=cos(an); + si=sin(an); + circle_size=scr_par.height*0.45; + speed=4000+p2*1000; + b.x=(co*a.x-si*a.y); + b.y=(si*a.x+co*a.y); + fact=(sqrt(b.x*b.x+b.y*b.y)-circle_size)/speed+1; + b.x=(b.x*fact); + b.y=(b.y*fact); + break; + + case 2: + an=0.002; + co=cos(an); + si=sin(an); + circle_size=scr_par.height*0.25; + speed=400+p2*100; + b.x=(co*a.x-si*a.y); + b.y=(si*a.x+co*a.y); + fact=-(sqrt(b.x*b.x+b.y*b.y)-circle_size)/speed+1; + b.x=(b.x*fact); + b.y=(b.y*fact); + break; + + case 3: + an=(sin(sqrt(a.x*a.x+a.y*a.y)/20)/20)+0.002; + co=cos(an); + si=sin(an); + circle_size=scr_par.height*0.25; + speed=4000; + b.x=(co*a.x-si*a.y); + b.y=(si*a.x+co*a.y); + fact=-(sqrt(b.x*b.x+b.y*b.y)-circle_size)/speed+1; + b.x=(b.x*fact); + b.y=(b.y*fact); + break; + + case 4: + an=0.002; + co=cos(an); + si=sin(an); + circle_size=scr_par.height*0.25; + speed=sin(sqrt(a.x*a.x+a.y*a.y)/5)*3000+4000; + b.x=(co*a.x-si*a.y); + b.y=(si*a.x+co*a.y); + fact=-(sqrt(b.x*b.x+b.y*b.y)-circle_size)/speed+1; + b.x=(b.x*fact); + b.y=(b.y*fact); + break; + + case 5: + b.x=a.x*1.02; + b.y=a.y*1.02; + break; + + case 6: + an=0.002; + co=cos(an); + si=sin(an); + circle_size=scr_par.height*0.25; + fact=1+cos(atan(a.x/(a.y+0.00001))*6)*0.02; + b.x=(co*a.x-si*a.y); + b.y=(si*a.x+co*a.y); + b.x=(b.x*fact); + b.y=(b.y*fact); + break; + + } + + b.x+=scr_par.width/2; + b.y+=scr_par.height/2; + if (b.x<0) + b.x=0; + if (b.y<0) + b.y=0; + if (b.x>scr_par.width-1) + b.x=scr_par.width-1; + if (b.y>scr_par.height-1) + b.y=scr_par.height-1; + + return b; +} + + +void generate_sector(int g,int f,int p1,int p2,int debut,int step,t_interpol* vector_field); + +void generate_sector(int g,int f,int p1,int p2,int debut,int step,t_interpol* vector_field) +{ + int fin=debut+step; + const int prop_transmitted=249; + const int b_add=g*scr_par.width*scr_par.height; + t_coord c; + + + if (fin>scr_par.height) + fin=scr_par.height; + for (c.y=debut;c.y<fin;c.y++) + for (c.x=0;c.x<scr_par.width;c.x++) { + t_complex a; + float fpy; + int rw,lw,add; + unsigned int w1,w2,w3,w4; + unsigned int x,y; + + a.x=(float)c.x; + a.y=(float)c.y; + a=fct(a,f,p1,p2); + add=c.x+c.y*scr_par.width; + x=(int)(a.x); + y=(int)(a.y); + vector_field[b_add+add].coord=(x<<16)|y; + + fpy=a.y-floor(a.y); + rw=(int)((a.x-floor(a.x))*prop_transmitted); + lw=prop_transmitted-rw; + w4=(int)(fpy*rw); + w2=rw-w4; + w3=(int)(fpy*lw); + w1=lw-w3; + vector_field[b_add+add].weight=(w1<<24)|(w2<<16)|(w3<<8)|w4; + } +} + +void generate_vector_field(t_interpol* vector_field) +{ + int f; + int i,p1,p2; + + for (f=0;f<NB_FCT;f++) { + p1=2; + p2=2; + for (i=0;i<scr_par.height;i+=10) + generate_sector(f,f,p1,p2,i,10,vector_field); + } +} |