geom3d 0.2.0

Data structures and algorithms for 3D geometric modeling.
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use super::Surface;
use crate::{Float, Point3, Quat, Vec3};

#[derive(Debug)]
pub struct Cylinder {
    pub origin: Point3,
    pub axis: Vec3,
    /// Normalized direction for angle start
    pub ref_dir: Vec3,
    pub radius: Float,
}

impl Surface for Cylinder {
    fn get_point(&self, length: Float, angle: Float) -> Point3 {
        let rotation = Quat::from_axis_angle(self.axis, angle);
        self.origin + self.axis * length + rotation * self.ref_dir * self.radius
    }
}