1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2026-01-22 18:15:59 +00:00

Add rounding to sin/cos calc to improve accuracy

This commit is contained in:
David Schmenk
2025-12-01 19:24:44 -08:00
parent 15488e61c7
commit af2e3143f6
2 changed files with 20 additions and 13 deletions

View File

@@ -1,13 +1,16 @@
include "inc/cmdsys.plh"
include "inc/int32.plh"
byte sin90hi[]
byte = $00,$04,$09,$0D,$12,$16,$1B,$1F,$23,$28,$2C,$31,$35,$39,$3E,$42
byte = $46,$4B,$4F,$53,$57,$5B,$60,$64,$68,$6C,$70,$74,$78,$7C,$7F,$83
byte = $87,$8B,$8F,$92,$96,$99,$9D,$A0,$A4,$A7,$AB,$AE,$B1,$B4,$B7,$BA
byte = $BE,$C0,$C3,$C6,$C9,$CC,$CE,$D1,$D3,$D6,$D8,$DB,$DD,$DF,$E1,$E3
byte = $E5,$E7,$E9,$EB,$EC,$EE,$F0,$F1,$F3,$F4,$F5,$F6,$F7,$F8,$F9,$FA
byte = $FB,$FC,$FD,$FD,$FE,$FE,$FE,$FF,$FF,$FF
word sin90[]
word = $0000,$0478,$08EF,$0D66,$11DC,$1650,$1AC2,$1F33,$23A1,$280C
word = $2C74,$30D9,$353A,$3996,$3DEF,$4242,$4690,$4AD9,$4F1C,$5358
word = $578F,$5BBE,$5FE6,$6407,$6820,$6C31,$7039,$7439,$782F,$7C1C
word = $8000,$83DA,$87A9,$8B6D,$8F27,$92D6,$9679,$9A11,$9D9C,$A11B
word = $A48E,$A7F3,$AB4C,$AE97,$B1D5,$B505,$B827,$BB3A,$BE3F,$C135
word = $C41B,$C6F3,$C9BB,$CC73,$CF1C,$D1B4,$D43C,$D6B3,$D91A,$DB6F
word = $DDB4,$DFE7,$E209,$E419,$E617,$E804,$E9DE,$EBA6,$ED5C,$EEFF
word = $F090,$F20E,$F378,$F4D0,$F615,$F747,$F865,$F970,$FA68,$FB4C
word = $FC1C,$FCD9,$FD82,$FE18,$FE99,$FF07,$FF60,$FFA6,$FFD8,$FFF6
def sin32(deg)#0
word[2] i32
@@ -15,22 +18,22 @@ def sin32(deg)#0
while deg >= 360; deg = deg - 360; loop
while deg < 0; deg = deg + 360; loop
if deg < 90
i32[0] = ((sin90hi[deg] << 8) | sin90hi[deg])
i32[0] = (sin90[deg])
i32[1] = 0
elsif deg == 90
i32[0] = 0
i32[1] = 1
elsif deg <= 180
i32[0] = ((sin90hi[180 - deg] << 8) | sin90hi[180 - deg])
i32[0] = (sin90[180 - deg])
i32[1] = 0
elsif deg < 270
i32[0] = -((sin90hi[deg - 180] << 8) | sin90hi[deg - 180])
i32[0] = -(sin90[deg - 180])
i32[1] = -1
elsif deg == 270
i32[0] = 0
i32[1] = -1
else
i32[0] = -((sin90hi[360 - deg] << 8) | sin90hi[360 - deg])
i32[0] = -(sin90[360 - deg])
i32[1] = -1
fin
load32(@i32)
@@ -40,6 +43,7 @@ export def mulsin(val, deg)
word[2] i32
sin32(deg)
muli16(val)
addi16($7FFF) // Round up
store32(@i32)
return i32[1]
end
@@ -48,6 +52,7 @@ export def mulcos(val, deg)
word[2] i32
sin32(deg + 90)
muli16(val)
addi16($7FFF) // Round up
store32(@i32)
return i32[1]
end

View File

@@ -9,7 +9,7 @@ SRC" TURTLE.4TH"
: SHOW
0 HGRMODE HGRDRAWBUF TILEDRAWBUF DROP
280 192 INITTURTLE
1 HGRCOLOR
3 HGRCOLOR
;
: SQUARE
@@ -20,7 +20,7 @@ SRC" TURTLE.4TH"
;
: SPIN
360 0 DO
361 0 DO
50 SQUARE
I TURNTO
10 +LOOP
@@ -30,3 +30,5 @@ SRC" TURTLE.4TH"
SHOW
SPIN
;
SHOW SPIN