summaryrefslogtreecommitdiffstats
path: root/noatun-plugins/tyler/compute.c
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commit84da08d7b7fcda12c85caeb5a10b4903770a6f69 (patch)
tree2a6aea76f2dfffb4cc04bb907c4725af94f70e72 /noatun-plugins/tyler/compute.c
downloadtdeaddons-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.c188
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);
+ }
+}