Rev 1821 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1821 | Rev 1872 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | #include "dongfangMath.h" |
1 | #include "dongfangMath.h" |
2 | #include <inttypes.h> |
2 | #include <inttypes.h> |
3 | #include <avr/pgmspace.h> |
3 | #include <avr/pgmspace.h> |
Line -... | Line 4... | ||
- | 4 | ||
- | 5 | // For scope debugging only! |
|
- | 6 | #include "output.h" |
|
- | 7 | ||
- | 8 | // Debug |
|
- | 9 | #include "uart0.h" |
|
4 | 10 | ||
5 | const int16_t SIN_TABLE[] PROGMEM = { (int16_t) (0.0 * MATH_UNIT_FACTOR + 0.5), |
11 | const int16_t SIN_TABLE[] PROGMEM = { (int16_t) (0.0 * MATH_UNIT_FACTOR + 0.5), |
6 | (int16_t) (0.01745240643728351 * MATH_UNIT_FACTOR + 0.5), |
12 | (int16_t) (0.01745240643728351 * MATH_UNIT_FACTOR + 0.5), |
7 | (int16_t) (0.03489949670250097 * MATH_UNIT_FACTOR + 0.5), |
13 | (int16_t) (0.03489949670250097 * MATH_UNIT_FACTOR + 0.5), |
8 | (int16_t) (0.05233595624294383 * MATH_UNIT_FACTOR + 0.5), |
14 | (int16_t) (0.05233595624294383 * MATH_UNIT_FACTOR + 0.5), |
Line 188... | Line 194... | ||
188 | (int16_t) (32767) }; |
194 | (int16_t) (32767) }; |
Line 189... | Line 195... | ||
189 | 195 | ||
190 | int16_t int_sin(int32_t arg) { |
196 | int16_t int_sin(int32_t arg) { |
191 | int8_t sign; |
197 | int8_t sign; |
192 | int16_t result; |
198 | int16_t result; |
193 | arg /= MATH_DRG_FACTOR; |
199 | int16_t argp = arg / MATH_DRG_FACTOR; |
194 | arg %= 360; |
200 | argp %= 360; |
195 | if (arg < 0) { |
201 | if (argp < 0) { |
196 | arg = -arg; |
202 | argp = -argp; |
197 | sign = -1; |
203 | sign = -1; |
198 | } else { |
204 | } else { |
199 | sign = 1; |
205 | sign = 1; |
200 | } |
206 | } |
201 | if (arg >= 90) { |
207 | if (argp >= 90) { |
202 | arg = 180 - arg; |
208 | argp = 180 - argp; |
203 | } |
209 | } |
204 | result = pgm_read_word(&SIN_TABLE[(uint8_t) arg]); |
210 | result = pgm_read_word(&SIN_TABLE[(uint8_t) argp]); |
205 | return (sign == 1) ? result : -result; |
211 | return (sign == 1) ? result : -result; |
Line 206... | Line 212... | ||
206 | } |
212 | } |
207 | 213 | ||
Line 212... | Line 218... | ||
212 | } |
218 | } |
Line 213... | Line 219... | ||
213 | 219 | ||
214 | int16_t int_tan(int32_t arg) { |
220 | int16_t int_tan(int32_t arg) { |
215 | int8_t sign = 1; |
221 | int8_t sign = 1; |
216 | int16_t result; |
222 | int16_t result; |
217 | arg /= MATH_DRG_FACTOR; |
223 | int16_t argp = arg / MATH_DRG_FACTOR; |
218 | if (arg >= 90) { |
224 | if (argp >= 90) { |
219 | arg = 180 - arg; |
225 | argp = 180 - argp; |
220 | sign = -1; |
226 | sign = -1; |
221 | } else if (arg < -90) { |
227 | } else if (argp < -90) { |
222 | arg += 180; |
228 | argp += 180; |
223 | } else if (arg < 0) { |
229 | } else if (argp < 0) { |
224 | arg = -arg; |
230 | argp = -argp; |
225 | sign = -1; |
231 | sign = -1; |
226 | } |
232 | } |
227 | result = pgm_read_word(&TAN_TABLE[(uint8_t) arg]); |
233 | result = pgm_read_word(&TAN_TABLE[(uint8_t) argp]); |
228 | return (sign == 1) ? result : -result; |
234 | return (sign == 1) ? result : -result; |