fix point to triangle distance computation
This commit is contained in:
parent
13a582b20b
commit
fee21c7a34
15
src/main.cc
15
src/main.cc
@ -121,16 +121,23 @@ int main(int argc, char **argv) {
|
|||||||
profile->SetPoints(points);
|
profile->SetPoints(points);
|
||||||
profile->SetStrips(strips);
|
profile->SetStrips(strips);
|
||||||
|
|
||||||
vtkTriangle *cell = vtkTriangle::SafeDownCast(profile->GetCell(0));
|
vtkCell *cell = profile->GetCell(0);
|
||||||
|
// vtkTriangle *triangle = vtkTriangle::SafeDownCast(cell);
|
||||||
|
// vtkTriangle *triangle = (vtkTriangle *) cell;
|
||||||
|
|
||||||
double direction[3] = {0, 0, 0};
|
double direction[3];// = {0, 0, 0};
|
||||||
double point[3] = {0, 1, 0};
|
double point[3] = {0, 1, 0};
|
||||||
|
|
||||||
double d = pointTriangleDistance(point, cell, direction);
|
double d = pointTriangleDistance(point, cell, direction);
|
||||||
//double d = 5;
|
//double d = 5;
|
||||||
|
|
||||||
std::cout << "[" << point[0] << ", " << point[1] << ", " << point[2] << "] (" << d << ")"
|
std::cout << "[" << point[0]
|
||||||
<< "[" << direction[0] << ", " << direction[1] << ", " << direction[2] << "]\n";
|
<< ", " << point[1]
|
||||||
|
<< ", " << point[2]
|
||||||
|
<< "] (" << d << ")"
|
||||||
|
<< "[" << direction[0]
|
||||||
|
<< ", " << direction[1]
|
||||||
|
<< ", " << direction[2] << "]\n";
|
||||||
|
|
||||||
#ifdef USE_VIEWER
|
#ifdef USE_VIEWER
|
||||||
/* Volume rendering properties */
|
/* Volume rendering properties */
|
||||||
|
@ -1,19 +1,20 @@
|
|||||||
#include "point_tris_dist.h"
|
#include "point_tris_dist.h"
|
||||||
|
|
||||||
#include <vtkPoints.h>
|
#include <vtkPoints.h>
|
||||||
|
#include <vtkTriangle.h>
|
||||||
#include <vtkMath.h>
|
#include <vtkMath.h>
|
||||||
|
|
||||||
double pointSegmentDistance(double *p, double *a, double *b, double* normal) {
|
double pointSegmentDistance(double *p, double *a, double *b, double* direction) {
|
||||||
double segSqrLength = vtkMath::Distance2BetweenPoints(a, b);
|
double segSqrLength = vtkMath::Distance2BetweenPoints(a, b);
|
||||||
|
|
||||||
double ap[3]; vtkMath::Subtract(p, a, ap);
|
double ap[3]; vtkMath::Subtract(p, a, ap);
|
||||||
double ab[3]; vtkMath::Subtract(b, a, ab);
|
double ab[3]; vtkMath::Subtract(b, a, ab);
|
||||||
|
|
||||||
if(segSqrLength <= 0) {
|
if(segSqrLength <= 0) {
|
||||||
normal[0] = ap[0];
|
direction[0] = ap[0];
|
||||||
normal[1] = ap[1];
|
direction[1] = ap[1];
|
||||||
normal[2] = ap[2];
|
direction[2] = ap[2];
|
||||||
vtkMath::Normalize(normal);
|
vtkMath::Normalize(direction);
|
||||||
return vtkMath::Norm(ap, 3);
|
return vtkMath::Norm(ap, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -22,14 +23,14 @@ double pointSegmentDistance(double *p, double *a, double *b, double* normal) {
|
|||||||
vtkMath::MultiplyScalar(ab, h);
|
vtkMath::MultiplyScalar(ab, h);
|
||||||
double v[3]; vtkMath::Subtract(ap, ab, v);
|
double v[3]; vtkMath::Subtract(ap, ab, v);
|
||||||
|
|
||||||
normal[0] = v[0];
|
direction[0] = v[0];
|
||||||
normal[1] = v[1];
|
direction[1] = v[1];
|
||||||
normal[2] = v[2];
|
direction[2] = v[2];
|
||||||
vtkMath::Normalize(normal);
|
vtkMath::Normalize(direction);
|
||||||
return vtkMath::Norm(v);
|
return vtkMath::Norm(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
double pointTriangleDistance(double *p, vtkTriangle *triangle, double *normal) {
|
double pointTriangleDistance(double *p, vtkCell *triangle, double *direction) {
|
||||||
double a[3]; triangle->GetPoints()->GetPoint(0, a);
|
double a[3]; triangle->GetPoints()->GetPoint(0, a);
|
||||||
double b[3]; triangle->GetPoints()->GetPoint(1, b);
|
double b[3]; triangle->GetPoints()->GetPoint(1, b);
|
||||||
double c[3]; triangle->GetPoints()->GetPoint(2, c);
|
double c[3]; triangle->GetPoints()->GetPoint(2, c);
|
||||||
@ -64,7 +65,7 @@ double pointTriangleDistance(double *p, vtkTriangle *triangle, double *normal) {
|
|||||||
n[2] * p[2],
|
n[2] * p[2],
|
||||||
};
|
};
|
||||||
|
|
||||||
double t[3]; vtkMath::Subtract(na, np, t);
|
double t[3]; vtkMath::Subtract(np, na, t);
|
||||||
|
|
||||||
double nt[3] = {
|
double nt[3] = {
|
||||||
n[0] * t[0],
|
n[0] * t[0],
|
||||||
@ -73,10 +74,10 @@ double pointTriangleDistance(double *p, vtkTriangle *triangle, double *normal) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
normal[0] = nt[0];
|
direction[0] = nt[0];
|
||||||
normal[1] = nt[1];
|
direction[1] = nt[1];
|
||||||
normal[2] = nt[2];
|
direction[2] = nt[2];
|
||||||
vtkMath::Normalize(normal);
|
vtkMath::Normalize(direction);
|
||||||
return vtkMath::Norm(nt);
|
return vtkMath::Norm(nt);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -91,17 +92,17 @@ double pointTriangleDistance(double *p, vtkTriangle *triangle, double *normal) {
|
|||||||
double min = vtkMath::Min(lab, vtkMath::Min(lbc, lca));
|
double min = vtkMath::Min(lab, vtkMath::Min(lbc, lca));
|
||||||
|
|
||||||
if(min == lab) {
|
if(min == lab) {
|
||||||
normal[0] = normalA[0];
|
direction[0] = normalA[0];
|
||||||
normal[1] = normalA[1];
|
direction[1] = normalA[1];
|
||||||
normal[2] = normalA[2];
|
direction[2] = normalA[2];
|
||||||
} else if(min == lbc) {
|
} else if(min == lbc) {
|
||||||
normal[0] = normalB[0];
|
direction[0] = normalB[0];
|
||||||
normal[1] = normalB[1];
|
direction[1] = normalB[1];
|
||||||
normal[2] = normalB[2];
|
direction[2] = normalB[2];
|
||||||
} else {
|
} else {
|
||||||
normal[0] = normalC[0];
|
direction[0] = normalC[0];
|
||||||
normal[1] = normalC[1];
|
direction[1] = normalC[1];
|
||||||
normal[2] = normalC[2];
|
direction[2] = normalC[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
return min;
|
return min;
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
#ifndef POINT_TRIS_DIST_H
|
#ifndef POINT_TRIS_DIST_H
|
||||||
#define POINT_TRIS_DIST_H
|
#define POINT_TRIS_DIST_H
|
||||||
|
|
||||||
#include <vtkTriangle.h>
|
/* #include <vtkTriangle.h> */
|
||||||
|
#include <vtkCell.h>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
double pointTriangleDistance(double *point, vtkTriangle *triangle, double *normal);
|
double pointTriangleDistance(double *point, vtkCell *triangle, double *direction);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user