CGI/exercise4/src/Point.cpp
2018-11-13 09:22:16 +01:00

65 lines
1.6 KiB
C++

// This source code is property of the Computer Graphics and Visualization
// chair of the TU Dresden. Do not distribute!
// Copyright (C) CGV TU Dresden - All Rights Reserved
#include "Point.h"
#include "GridUtils.h"
//default constructor
Point::Point(){}
//construct a point with given point position v0
Point::Point(const Eigen::Vector3f& v0):v0(v0)
{
}
//construct a point from vertex v of giben halfedge mesh m
Point::Point(const HEMesh &m, const OpenMesh::VertexHandle& v):h(v)
{
v0 = ToEigenVector(m.point(v));
}
//returns axis aligned bounding box of point
Box Point::ComputeBounds() const
{
Box b;
b.Insert(v0);
return b;
}
//returns true if point overlap with box b
bool Point::Overlaps(const Box& b) const
{
Eigen::Vector3f lb = b.LowerBound();
Eigen::Vector3f ub = b.UpperBound();
return
(v0[0] >= lb[0] && v0[0] <= ub[0]&&
v0[1] >= lb[1] && v0[1] <= ub[1] &&
v0[2] >= lb[2] && v0[2] <= ub[2]);
}
//returns the point position
Eigen::Vector3f Point::ClosestPoint(const Eigen::Vector3f& p) const
{
return v0;
}
//returns the squared distance between the query point p and the current point
float Point::SqrDistance(const Eigen::Vector3f& p) const
{
Eigen::Vector3f d = p-ClosestPoint(p);
return d.squaredNorm();
}
//returns the euclidean distance between the query point p and the current point
float Point::Distance(const Eigen::Vector3f& p) const
{
return sqrt(SqrDistance(p));
}
//returns a the position of the point as a reference point which is used to sort the primitive in the AABB tree construction
Eigen::Vector3f Point::ReferencePoint() const
{
return v0;
}