morph.cpp File Reference

#include <qstring.h>
#include <math.h>
#include "value.h"
#include "runtime.h"

Go to the source code of this file.

Classes

class  NetPoint
class  Triangle

Functions

double min (double a, double b)
double dist (double, double, double, double)
int sign (double b)
void pos (double x1, double y1, double x2, double y2, double pct, double &x, double &y)
QString type_name (NetPoint)
int side (double a, double b, double x1, double y1, double x2, double y2)
int * getRing (double *x, double *y, int &count, bool *enabled, int points)
void newpoint (double ax, double ay, double bx, double by, double cx, double cy, double ix, double iy, double &tx, double &ty)
bool Q1 (double a)
bool Q3 (double a)
double calc_step (double x1, double y1, double x2, double y2)


Function Documentation

double calc_step double  x1,
double  y1,
double  x2,
double  y2
 

Definition at line 1172 of file morph.cpp.

References dist().

01173 {
01174   double d = dist(x1,y1,x2,y2);
01175   if (d==0) return 1;
01176   return 0.5/d;
01177 }

double dist double  ,
double  ,
double  ,
double 
 

return the distance between the two points

Definition at line 2 of file aux.cpp.

00003 {
00004   double x = x1-x0;
00005   double y = y1-y0;
00006   x*=x;
00007   y*=y;
00008   double d = x+y;
00009   d = (double) (sqrt(d) + 1);
00010   return d;
00011 }

int* getRing double *  x,
double *  y,
int &  count,
bool *  enabled,
int  points
 

Definition at line 817 of file morph.cpp.

00818 {
00819   int * result = new int[points];
00820   count = 0;
00821   double largestx = -1;
00822   int idx = -1;
00823   for(int i = 0 ; i < points; i++)
00824     if (enabled[i] && x[i]>largestx)
00825       largestx=x[idx=i];
00826   if (idx==-1) 
00827     {
00828       printf("No points left\n");
00829       return NULL;
00830     }
00831   result[count++]=idx;
00832   printf("pointidx %d\n",idx);
00833   
00834   while(true)
00835     {
00836       bool added_something = false;
00837       for(int i = 0 ; i < points; i++)
00838         {
00839           if (!enabled[i]) continue;
00840           bool already_in_result = false;
00841           for(int k = 0 ; k < count ; k++)
00842             if (result[k]==i) already_in_result = true;
00843           if (already_in_result) continue;
00844           int j;
00845           for(j = 0 ; j < points; j++)
00846             {
00847               if (!enabled[j]) continue;
00848               if (j==result[count-1]) continue;
00849               if (j==i) continue;
00850               if (side(x[j],
00851                        y[j],
00852                        x[result[count-1]],
00853                        y[result[count-1]],
00854                        x[i],
00855                        y[i])>0) break;
00856             }
00857           if (j==points)
00858             {
00859               printf("pointidx %d\n",i);
00860               added_something = true;
00861               result[count++]=i;
00862               assert(count < 1000);
00863               break;
00864             }
00865         }
00866       if (!added_something) return result;
00867     }
00868 }

double min double  a,
double  b
[inline]
 

Definition at line 4 of file morph.cpp.

Referenced by Runtime::add(), min(), and Runtime::straighten().

00005 {
00006   if (a<b) return a;
00007   return b;
00008 }

void newpoint double  ax,
double  ay,
double  bx,
double  by,
double  cx,
double  cy,
double  ix,
double  iy,
double &  tx,
double &  ty
 

Definition at line 878 of file morph.cpp.

References dist().

00880 {
00881   ax-=bx;
00882   ay-=by;
00883   cx-=bx;
00884   cy-=by;
00885   tx = ax + cx;
00886   ty = ay + cy;
00887   double d = dist(0,0,tx,ty);
00888   tx /= d;
00889   ty /= d;
00890   tx *= 40;
00891   ty *= 40;
00892   tx = ix - tx;
00893   ty = iy - ty;
00894 }

void pos double  x1,
double  y1,
double  x2,
double  y2,
double  pct,
double &  x,
double &  y
 

Definition at line 19 of file morph.cpp.

00020 {
00021   double dx = x2-x1;
00022   double dy = y2-y1;
00023   x = x1 + dx*pct;
00024   y = y1 + dy*pct;
00025 }

bool Q1 double  a  ) 
 

Definition at line 1156 of file morph.cpp.

01157 {
01158   while (a<0) a+=2*M_PI;
01159   while (a>=2*M_PI) a-=2*M_PI;
01160   bool r = a<=M_PI/2;
01161   return r;
01162 }

bool Q3 double  a  ) 
 

Definition at line 1164 of file morph.cpp.

01165 {
01166   while (a<0) a+=2*M_PI;
01167   while (a>=2*M_PI) a-=2*M_PI;
01168   bool r = a>=3*M_PI/2;
01169   return r;
01170 }

int side double  a,
double  b,
double  x1,
double  y1,
double  x2,
double  y2
 

Definition at line 598 of file morph.cpp.

References sign().

00599 {
00600   return sign( (a-x1)*(y2-y1) - (b-y1)*(x2-x1) );
00601 }

int sign double  b  ) 
 

Definition at line 12 of file morph.cpp.

Referenced by NetPoint::move(), and side().

00013 {
00014   if (b>0) return 1;
00015   if (b<0) return -1;
00016   return 0;
00017 }

QString type_name NetPoint   ) 
 

Definition at line 461 of file morph.cpp.

00462 {
00463   return "NetPoint-type";
00464 }


Generated on Mon Jun 5 22:08:42 2006 for iis by  doxygen 1.4.6