Zuletzt aktiv 1 month ago

Änderung 1c56af1d3dd11e337da9398977770c53c484e8a4

rotate.go Originalformat
1var rotation90 = complex(tools.Cos(float32(math.Pi/2)), tools.Sin(float32(math.Pi/2)))
2func rotateByte(v byte, n int, conj bool) byte {
3 byteData := make([]byte, 8)
4 outByteData := make([]byte, 8)
5
6 // region convert to bits in bytes
7 for i := 0; i < 8; i++ {
8 byteData[i] = -127
9 if v & (1 << uint(i)) > 0 {
10 byteData[i] = 127
11 }
12 }
13 // endregion
14 // region Rotate
15 for i := 0; i < 4; i++ {
16 // Sync Word
17 b0 := int(byteData[i*2])
18 b1 := int(byteData[i*2+1])
19
20 // 0 degrees
21 c := complex(float32(b0), float32(b1))
22 for z := 0; z < n; z++ {
23 c *= rotation90
24 }
25 outByteData[i*2] = f2b(real(c))
26 if conj {
27 outByteData[i*2+1] = -f2b(imag(c))
28 } else {
29 outByteData[i*2+1] = f2b(imag(c))
30 }
31 }
32 // endregion
33 // region Unmap to Byte
34 v = 0
35 for i := 0; i < 8; i++ {
36 t := 0
37 if outByteData[i] > 0 {
38 t = 1
39 }
40
41 v |= byte(t << uint(i))
42 }
43 // endregion
44
45 return v
46}
47