ncollide2d_updated/transformation/to_polyline/
capsule_to_polyline.rs

1use super::ToPolyline;
2use crate::procedural::utils;
3use crate::procedural::Polyline;
4use crate::shape::Capsule;
5use na;
6use na::{Point2, Vector2};
7use simba::scalar::RealField;
8
9impl<N: RealField + Copy> ToPolyline<N> for Capsule<N> {
10    type DiscretizationParameter = u32;
11
12    fn to_polyline(&self, nsubdiv: u32) -> Polyline<N> {
13        let pi = N::pi();
14        let dtheta = pi / na::convert(nsubdiv as f64);
15
16        let mut points: Vec<Point2<N>> = Vec::with_capacity(nsubdiv as usize);
17
18        utils::push_xy_arc(self.radius, nsubdiv, dtheta, &mut points);
19
20        let npoints = points.len();
21
22        for i in 0..npoints {
23            let new_point = points[i] + Vector2::new(na::zero(), self.half_height);
24
25            points.push(-new_point);
26            points[i] = new_point;
27        }
28
29        Polyline::new(points, None)
30    }
31}