Go to the documentation of this file.00001
00002
00003 #include "arith.h"
00004
00005 edge(f,n,planetab,planework,r,linetab,m)
00006 MATRIX f;
00007 int n;
00008 unsigned int planetab;
00009 unsigned int planework;
00010 int r;
00011 LINE linetab[MAXEDGE];
00012 int m;
00013 {
00014 MATRIX fwork,s,e,u,v,work;
00015 VECTOR fugo;
00016 register int positive,negative;
00017 register int i,ii,j,job,info;
00018
00019 if(r == 1){
00020 v[0][0]= f[0][0]/fabs(f[0][0]);
00021 }
00022 else{
00023 ii=0;
00024 for(i=0; ii<r-1; i++)
00025 if((planework & (1<<i)) != 0){
00026 for(j=0; j<r; j++)
00027 fwork[ii][j]= f[i][j];
00028 ii += 1;
00029 }
00030 job=11;
00031 info=ssvdc(fwork,r-1,r-1,r,s,e,u,r-1,v,r,work,job);
00032 }
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 positive=0;
00043 negative=0;
00044 for(i=0; i<n; i++){
00045 if((planetab & (1<<i)) != 0){
00046 fugo[i]=0.0e0;
00047 for(j=0; j<r; j++)
00048 fugo[i] += f[i][j] * v[j][r-1];
00049 if(fugo[i]>EPS){
00050 positive = 1;
00051 }
00052 if(fugo[i]<-EPS){
00053 negative = -1;
00054 }
00055 if((positive * negative) != 0)
00056 return(FALSE);
00057 }
00058 }
00059
00060 if(negative == -1){
00061 for(j=0; j<r; j++){
00062 v[j][r-1]= -v[j][r-1];
00063 }
00064 }
00065
00066 linetab[m].index=TRUE;
00067 linetab[m].next=m+1;
00068 linetab[m].last=m-1;
00069 linetab[m].plane=planework;
00070 for(j=0; j<r; j++)
00071 linetab[m].s[j]= v[j][r-1];
00072 return(TRUE);
00073 }