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