Guest User

Untitled

a guest
Jul 20th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.79 KB | None | 0 0
  1. use std::ops::{Add, Mul, Div};
  2.  
  3. #[derive(Copy, Debug, Clone)]
  4. struct Point<T> {
  5. x : T,
  6. y : T,
  7. }
  8.  
  9. impl<T> Point<T> where T : Copy {
  10. fn new(x : T, y : T) -> Point<T> {
  11. Point {x, y}
  12. }
  13.  
  14. fn midpoint(p0 : Point<T>, p1 : Point<T>) -> Point<T>
  15. where T : Copy + Add<Output=T> + Div<Output=T> {
  16. (p0 + p1) / 2 as T
  17. }
  18. }
  19.  
  20. impl<T> Add for Point<T> where T : Add<Output=T> + Copy {
  21. type Output = Point<T>;
  22. fn add(self, rhs : Point<T>) -> Point<T> {
  23. Point::new(self.x + rhs.x, self.y + rhs.y)
  24. }
  25. }
  26.  
  27. type PointI32 = Point<i32>;
  28. type PointF32 = Point<f32>;
  29.  
  30. fn main() {
  31. let p0 = PointF32::new(1f32, 5f32);
  32. let p1 = PointF32::new(-3f32, 4f32);
  33. let res = PointF32::midpoint(p0, p1);
  34. println!("{:?}", res);
  35.  
  36. // println!("Hello, world!");
  37. }
Add Comment
Please, Sign In to add comment