contrib
contact
clib
edge.c
Go to the documentation of this file.
1
/* Oct.12, 1990. Bug fix. when r==1, skip ssvdc() because r-1 becomes 0 */
2
3
#include "
arith.h
"
4
5
edge
(f,
n
,planetab,planework,r,linetab,m)
6
MATRIX
f
;
7
int
n
;
/* n = the row number of C */
8
unsigned
int
planetab;
9
unsigned
int
planework;
10
int
r;
/* r = rankC */
11
LINE
linetab[
MAXEDGE
];
12
int
m;
13
{
14
MATRIX
fwork,
s
,e,u,
v
,work;
15
VECTOR
fugo;
16
register
int
positive,negative;
17
register
int
i,ii,j,job,info;
18
19
if
(r == 1){
20
v
[0][0]=
f
[0][0]/fabs(
f
[0][0]);
21
}
22
else
{
23
ii=0;
24
for
(i=0; ii<r-1; i++)
25
if
((planework & (1<<i)) != 0){
26
for
(j=0; j<r; j++)
27
fwork[ii][j]=
f
[i][j];
28
ii += 1;
29
}
30
job=11;
31
info=
ssvdc
(fwork,r-1,r-1,r,
s
,e,u,r-1,
v
,r,work,job);
32
}
33
34
/*
35
if(s[r-2][r-2] < EPS)
36
return(FALSE);
37
*/
38
39
/* check the new edge is not outside the cone */
40
/* however it may has no meaning, only sign for the edge is required */
41
42
positive=0;
43
negative=0;
44
for
(i=0; i<
n
; i++){
45
if
((planetab & (1<<i)) != 0){
46
fugo[i]=0.0e0;
47
for
(j=0; j<r; j++)
48
fugo[i] +=
f
[i][j] *
v
[j][r-1];
49
if
(fugo[i]>
EPS
){
50
positive = 1;
51
}
52
if
(fugo[i]<-
EPS
){
53
negative = -1;
54
}
55
if
((positive * negative) != 0)
56
return
(
FALSE
);
57
}
58
}
59
60
if
(negative == -1){
61
for
(j=0; j<r; j++){
62
v
[j][r-1]= -
v
[j][r-1];
63
}
64
}
65
66
linetab[m].
index
=
TRUE
;
67
linetab[m].
next
=m+1;
68
linetab[m].
last
=m-1;
69
linetab[m].
plane
=planework;
70
for
(j=0; j<r; j++)
71
linetab[m].
s
[j]=
v
[j][r-1];
72
return
(
TRUE
);
73
}
FALSE
#define FALSE
Definition:
arith.h:20
ssvdc
ssvdc(MATRIX xarg, int ldx, int n, int p, MATRIX s, MATRIX e, MATRIX u, int ldu, MATRIX v, int ldv, MATRIX work, int job)
Definition:
contrib/contact/clib/ssvdc.c:11
s
short s
Definition:
structsize.c:2
arith.h
TRUE
#define TRUE
Definition:
arith.h:19
line::plane
unsigned int plane
Definition:
arith.h:38
line::index
int index
Definition:
arith.h:34
EPS
#define EPS
Definition:
arith.h:15
MAXEDGE
#define MAXEDGE
Definition:
arith.h:14
line::last
int last
Definition:
arith.h:36
line
Definition:
arith.h:33
edge
edge(MATRIX f, int n, unsigned int planetab, unsigned int planework, int r, linetab, int m)
Definition:
edge.c:5
f
f
MATRIX
VECTOR MATRIX[MAX]
Definition:
arith.h:27
line::next
int next
Definition:
arith.h:35
VECTOR
REAL VECTOR[MAX]
Definition:
arith.h:26
n
GLfloat n[6][3]
Definition:
cube.c:15
v
GLfloat v[8][3]
Definition:
cube.c:21
euslisp
Author(s): Toshihiro Matsui
autogenerated on Thu Jun 15 2023 02:06:43