cvmath 0.0.8

Computer Graphics Vector Math Library
Documentation
type Point2 = cvmath::Point2<f64>;
type Line2 = cvmath::Line2<f64>;

#[derive(Copy, Clone, Debug, PartialEq)]
enum Cut {
	Left,
	Right,
	Cut(Point2),
}

fn cut(line: Line2, x: f64) -> Cut {
	if line.start.x <= x && line.end.x <= x {
		Cut::Left
	}
	else if line.start.x >= x && line.end.x >= x {
		Cut::Right
	}
	else {
		let ratio = (x - line.start.x) / (line.end.x - line.start.x);
		let y = line.start.y + (line.end.y - line.start.y) * ratio;
		Cut::Cut(Point2::new(x, y))
	}
}

#[test]
fn cut_it() {
	let cut = cut(Line2 { start: Point2::new(0.0, 0.0), end: Point2::new(2.0, 2.0) }, 1.0);
	assert_eq!(cut, Cut::Cut(Point2::new(1.0, 1.0)));
}