-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdistmat.c
94 lines (70 loc) · 2.3 KB
/
distmat.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/* ------------------------------------------------------- */
/* */
/* distmat.c [distance matrix - function definitions] */
/* */
/* ------------------------------------------------------- */
/* */
/* First version: Aaron Ponti - 02/08/28 */
/* */
/* ------------------------------------------------------- */
#ifndef DISTMAT_H_
#define DISTMAT_H_
#include "distmat.h"
#endif
/* calcDistMatrix1D */
void calcDistMatrix1D(double *D, double *M, double *N, int Mrows, int Nrows)
{
int i,j;
for (i=0;i<Nrows;i++) {
for (j=0;j<Mrows;j++) {
// Store calculated distance in D
*D++=*(N+i)-*(M+j);
}
}
}
/* calcDistMatrix2D */
void calcDistMatrix2D(double *D, double *M, double *N, int Mrows, int Nrows)
{
double mX=0, mY=0;
double nX=0, nY=0;
double *posM, *posN;
int i,j;
for (i=0;i<Nrows;i++) {
// Get source position
posN=N+i;
nX=*posN;
nY=*(posN+Nrows);
for (j=0;j<Mrows;j++) {
// Get target position
posM=M+j;
mX=*posM;
mY=*(posM+Mrows);
// Store calculated distance in D
*D++=sqrt((nY-mY)*(nY-mY)+(nX-mX)*(nX-mX));
}
}
}
/* calcDistMatrix3D */
void calcDistMatrix3D(double *D, double *M, double *N, int Mrows, int Nrows)
{
double mX=0, mY=0, mZ=0;
double nX=0, nY=0, nZ=0;
double *posM, *posN;
int i,j;
for (i=0;i<Nrows;i++) {
// Get source position
posN=N+i;
nX=*posN;
nY=*(posN+Nrows);
nZ=*(posN+2*Nrows);
for (j=0;j<Mrows;j++) {
// Get target position
posM=M+j;
mX=*posM;
mY=*(posM+Mrows);
mZ=*(posM+2*Mrows);
// Store calculated distance in D
*D++=sqrt((nY-mY)*(nY-mY)+(nX-mX)*(nX-mX)+(nZ-mZ)*(nZ-mZ));
}
}
}