diff options
author | Orangerot <purple@orangerot.dev> | 2024-06-27 11:30:16 +0200 |
---|---|---|
committer | Orangerot <purple@orangerot.dev> | 2024-06-27 11:30:16 +0200 |
commit | 4b0a6a01b051a4ebfbc17661d14cb23fe4f275fb (patch) | |
tree | 0072cca328fe5adb2ed61004010228ff85e2164d /check-if-it-is-a-straight-line/src/main.rs |
Diffstat (limited to 'check-if-it-is-a-straight-line/src/main.rs')
-rw-r--r-- | check-if-it-is-a-straight-line/src/main.rs | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/check-if-it-is-a-straight-line/src/main.rs b/check-if-it-is-a-straight-line/src/main.rs new file mode 100644 index 0000000..711e12e --- /dev/null +++ b/check-if-it-is-a-straight-line/src/main.rs @@ -0,0 +1,37 @@ +fn main() { + let tests = [ + (vec![[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]], true), + (vec![[1,1],[2,2],[3,4],[4,5],[5,6],[7,7]], false), + (vec![[0,0],[0,1],[0,-1]], true) + ]; + + for test in tests { + println!("{:?} is {} should be {}", + test.0, + check_straight_line(test.0.iter().map(|c| c.to_vec()).collect()), + test.1); + } +} + +pub fn check_straight_line(coordinates: Vec<Vec<i32>>) -> bool { + let base = get_lin_fn(coordinates[0].clone(), coordinates[1].clone()); + println!("{:?} base", base); + for c in 1..coordinates.len() { + let lin_fn = get_lin_fn(coordinates[0].clone(), coordinates[c].clone()); + println!("{} {:?}", c, lin_fn); + if lin_fn != base { + return false; + } + } + return true; +} + +pub fn get_lin_fn(a: Vec<i32>, b: Vec<i32>) -> (f32, f32) { + let mx = b[0] - a[0]; + let my = b[1] - a[1]; + let m = my as f32/mx as f32; + let b = a[1] as f32 - m*a[0] as f32; + + return (m,b); +} + |