mirror of
https://github.com/hannobraun/Fornjot
synced 2025-02-27 09:35:52 +00:00
Add Triangle::from_points
This commit is contained in:
parent
a3249d3510
commit
3ea35f18d6
@ -11,6 +11,28 @@ pub struct Triangle<const D: usize> {
|
||||
}
|
||||
|
||||
impl<const D: usize> Triangle<D> {
|
||||
/// Construct a triangle from three points
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// Panics, if the points don't form a triangle.
|
||||
pub fn from_points(points: [Point<D>; 3]) -> Self {
|
||||
let area = {
|
||||
let [a, b, c] = points.map(Point::to_xyz);
|
||||
(b - a).cross(&(c - a)).magnitude()
|
||||
};
|
||||
|
||||
// A triangle is not valid if it doesn't span any area
|
||||
if area != Scalar::from(0.0) {
|
||||
Self {
|
||||
points,
|
||||
color: [255, 0, 0, 255],
|
||||
}
|
||||
} else {
|
||||
panic!("Invalid Triangle specified");
|
||||
}
|
||||
}
|
||||
|
||||
/// Access the triangle's points
|
||||
pub fn points(&self) -> [Point<D>; 3] {
|
||||
self.points
|
||||
@ -36,20 +58,7 @@ impl Triangle<3> {
|
||||
|
||||
impl<const D: usize> From<[Point<D>; 3]> for Triangle<D> {
|
||||
fn from(points: [Point<D>; 3]) -> Self {
|
||||
let area = {
|
||||
let [a, b, c] = points.map(Point::to_xyz);
|
||||
(b - a).cross(&(c - a)).magnitude()
|
||||
};
|
||||
|
||||
// A triangle is not valid if it doesn't span any area
|
||||
if area != Scalar::from(0.0) {
|
||||
Self {
|
||||
points,
|
||||
color: [255, 0, 0, 255],
|
||||
}
|
||||
} else {
|
||||
panic!("Invalid Triangle specified");
|
||||
}
|
||||
Self::from_points(points)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user