-
Notifications
You must be signed in to change notification settings - Fork 232
Expand file tree
/
Copy pathelementary_geometry.cpp
More file actions
38 lines (29 loc) · 1.09 KB
/
elementary_geometry.cpp
File metadata and controls
38 lines (29 loc) · 1.09 KB
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
// Copyright 2017-2023, Nicholas Sharp and the Polyscope contributors. https://polyscope.run
#include "polyscope/elementary_geometry.h"
#include <cmath>
#include <vector>
#ifndef GLM_ENABLE_EXPERIMENTAL
#define GLM_ENABLE_EXPERIMENTAL
#endif
#include <glm/gtx/norm.hpp>
namespace polyscope {
float computeTValAlongLine(glm::vec3 queryP, glm::vec3 lineStart, glm::vec3 lineEnd) {
glm::vec3 lineVec = lineEnd - lineStart;
glm::vec3 queryVec = queryP - lineStart;
float len2 = glm::length2(lineVec);
float t = glm::dot(queryVec, lineVec) / len2;
t = glm::clamp(t, 0.f, 1.f);
return t;
}
glm::vec3 projectToPlane(glm::vec3 queryP, glm::vec3 planeNormal, glm::vec3 pointOnPlane) {
glm::vec3 pVec = queryP - pointOnPlane;
glm::vec3 pVecOrtho = glm::dot(pVec, planeNormal) * planeNormal;
return queryP - pVecOrtho;
}
float signedTriangleArea(glm::vec3 normal, glm::vec3 pA, glm::vec3 pB, glm::vec3 pC) {
glm::vec3 cross = glm::cross(pB - pA, pC - pA);
float sign = glm::sign(glm::dot(normal, cross));
float area = glm::length(cross) / 2.;
return sign * area;
}
} // namespace polyscope