Showing
2 changed files
with
54 additions
and
13 deletions
| ... | ... | @@ -61,7 +61,11 @@ impl Fractional { |
| 61 | 61 | // the precision but ensures smaller numbers for numerator and |
| 62 | 62 | // denominator. |
| 63 | 63 | if _d > 1 && (_n % _d) * 10000000 < _n { |
| 64 | - Self(_n / _d, 1) | |
| 64 | + if n == _n { | |
| 65 | + Self(_n / _d, 1) | |
| 66 | + } else { | |
| 67 | + Self(1, _n / _d) | |
| 68 | + } | |
| 65 | 69 | } else { |
| 66 | 70 | Self(n / hcf(n, d), d / hcf(n, d)) |
| 67 | 71 | } | ... | ... |
| ... | ... | @@ -21,6 +21,8 @@ |
| 21 | 21 | use std::convert::{TryFrom, TryInto, Into}; |
| 22 | 22 | use std::num::TryFromIntError; |
| 23 | 23 | use std::f64::consts::PI as FPI; |
| 24 | +use std::fmt::Display; | |
| 25 | +use std::ops::{Add,Sub,Neg,Mul,Div}; | |
| 24 | 26 | |
| 25 | 27 | use fractional::continuous::Continuous; |
| 26 | 28 | use fractional::fractional::{Fractional, from_vector}; |
| ... | ... | @@ -96,7 +98,7 @@ fn pi() { |
| 96 | 98 | } |
| 97 | 99 | |
| 98 | 100 | fn _sin() { |
| 99 | - for d in [ 0, 45, 90, 135, 180, 225, 270, 315 | |
| 101 | + for d in [ 0, 30, 45, 90, 135, 180, 225, 270, 315 | |
| 100 | 102 | , 9, 17, 31, 73, 89, 123, 213, 312, 876 ].iter() { |
| 101 | 103 | let s = Fractional::sin(*d as i32); |
| 102 | 104 | let sr :f64 = s.try_into().unwrap(); |
| ... | ... | @@ -107,7 +109,7 @@ fn _sin() { |
| 107 | 109 | } |
| 108 | 110 | |
| 109 | 111 | fn _tan() { |
| 110 | - for d in [ 0, 45, 90, 135, 180, 225, 270, 315 | |
| 112 | + for d in [ 0, 30, 45, 90, 135, 180, 225, 270, 315 | |
| 111 | 113 | , 9, 17, 31, 73, 89, 123, 213, 312, 876 ].iter() { |
| 112 | 114 | let t = Fractional::tan(*d as i32); |
| 113 | 115 | let tr :f64 = t.try_into().unwrap(); |
| ... | ... | @@ -118,7 +120,7 @@ fn _tan() { |
| 118 | 120 | } |
| 119 | 121 | |
| 120 | 122 | fn _cos() { |
| 121 | - for d in [ 0, 45, 90, 135, 180, 225, 270, 315 | |
| 123 | + for d in [ 0, 30, 45, 90, 135, 180, 225, 270, 315 | |
| 122 | 124 | , 9, 17, 31, 73, 89, 123, 213, 312, 876 ].iter() { |
| 123 | 125 | let c = Fractional::cos(*d as i32); |
| 124 | 126 | let cr :f64 = c.try_into().unwrap(); |
| ... | ... | @@ -128,11 +130,25 @@ fn _cos() { |
| 128 | 130 | } |
| 129 | 131 | } |
| 130 | 132 | |
| 131 | -fn _vector() { | |
| 133 | +fn _vector1() { | |
| 132 | 134 | let v1 = Vector(1.into(), 2.into(), 3.into()); |
| 133 | 135 | let v2 = Vector(2.into(), 2.into(), 3.into()); |
| 134 | 136 | let s :Fractional = 3.into(); |
| 135 | 137 | |
| 138 | + _vector(v1, v2, s); | |
| 139 | +} | |
| 140 | + | |
| 141 | +fn _vector2() { | |
| 142 | + let v1 = Vector(1.0, 2.0, 3.0); | |
| 143 | + let v2 = Vector(2.0, 2.0, 3.0); | |
| 144 | + let s = 3.0; | |
| 145 | + | |
| 146 | + _vector(v1, v2, s); | |
| 147 | +} | |
| 148 | + | |
| 149 | +fn _vector<T>(v1 :Vector<T>, v2 :Vector<T>, s :T) | |
| 150 | + where T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> | |
| 151 | + + Mul<Output = T> + Div<Output = T> + Trig + Copy + Display { | |
| 136 | 152 | println!("{:>14} : {}", "Vector v1", v1); |
| 137 | 153 | println!("{:>14} : {}", "Vector v2", v2); |
| 138 | 154 | println!("{:>14} : {}", "abs v1", v1.abs()); |
| ... | ... | @@ -153,16 +169,34 @@ fn _vector() { |
| 153 | 169 | println!("{:>14} : {}", "v2 * v1", v2 * v1); |
| 154 | 170 | } |
| 155 | 171 | |
| 156 | -fn _transform() { | |
| 157 | - let v = Vector(Fractional(1,1), Fractional(1,1), Fractional(1,1)); | |
| 158 | - let v1 = Vector(Fractional(1,1), Fractional(2,1), Fractional(3,1)); | |
| 159 | - let mt = translate(v); | |
| 172 | +fn _transform1() { | |
| 173 | + let v = Vector(Fractional(1,1), Fractional(1,1), Fractional(1,1)); | |
| 174 | + let v1 = Vector(Fractional(1,1), Fractional(2,1), Fractional(3,1)); | |
| 175 | + let v2 = Vector(Fractional(1,1), Fractional(1,1), Fractional(0,1)); | |
| 176 | + let v3 = Vector(Fractional(1,1), Fractional(0,1), Fractional(1,1)); | |
| 177 | + | |
| 178 | + _transform(v, v1, v2, v3); | |
| 179 | +} | |
| 180 | + | |
| 181 | +fn _transform2() { | |
| 182 | + let v = Vector(1.0, 1.0, 1.0); | |
| 183 | + let v1 = Vector(1.0, 2.0, 3.0); | |
| 184 | + let v2 = Vector(1.0, 1.0, 0.0); | |
| 185 | + let v3 = Vector(1.0, 0.0, 1.0); | |
| 186 | + | |
| 187 | + _transform(v, v1, v2, v3); | |
| 188 | +} | |
| 189 | + | |
| 190 | +fn _transform<T>(v :Vector<T>, v1 :Vector<T>, v2 :Vector<T>, v3 :Vector<T>) | |
| 191 | + where T: Add<Output = T> + Sub<Output = T> + Neg<Output = T> | |
| 192 | + + Mul<Output = T> + Div<Output = T> + Trig | |
| 193 | + + From<i32> + Copy + Display { | |
| 194 | + let mt = translate(v); | |
| 160 | 195 | |
| 161 | 196 | println!("{:>14} : {}", "Vector v1", v1); |
| 162 | 197 | println!("{:>14} : {}", "translate v1", mt.apply(&v1)); |
| 163 | 198 | println!(); |
| 164 | 199 | |
| 165 | - let v2 = Vector(1.into(), 1.into(), 0.into()); | |
| 166 | 200 | println!("{:>14} : {}", "Vector v2", v2); |
| 167 | 201 | for d in [ 30, 45, 60, 90, 120, 135, 150, 180 |
| 168 | 202 | , 210, 225, 240, 270, 300, 315, 330 ].iter() { |
| ... | ... | @@ -186,7 +220,6 @@ fn _transform() { |
| 186 | 220 | } |
| 187 | 221 | println!(); |
| 188 | 222 | |
| 189 | - let v3 = Vector(Fractional(1,1), Fractional(0,1), Fractional(1,1)); | |
| 190 | 223 | println!("{:>14} : {}", "Vector v3", v3); |
| 191 | 224 | for d in [ 30, 45, 60, 90, 120, 135, 150, 180 |
| 192 | 225 | , 210, 225, 240, 270, 300, 315, 330 ].iter() { |
| ... | ... | @@ -217,7 +250,11 @@ fn main() { |
| 217 | 250 | println!(); |
| 218 | 251 | _tan(); |
| 219 | 252 | println!(); |
| 220 | - _vector(); | |
| 253 | + _vector1(); | |
| 254 | + println!(); | |
| 255 | + _vector2(); | |
| 256 | + println!(); | |
| 257 | + _transform1(); | |
| 221 | 258 | println!(); |
| 222 | - _transform(); | |
| 259 | + _transform2(); | |
| 223 | 260 | } | ... | ... |
Please
register
or
login
to post a comment