| 1 | struct Quad { |
| 2 | mut: |
| 3 | x f64 |
| 4 | y f64 |
| 5 | z f64 |
| 6 | w f64 |
| 7 | } |
| 8 | |
| 9 | fn (q Quad) get(i int) f64 { |
| 10 | return match i { |
| 11 | 0 { q.x } |
| 12 | 1 { q.y } |
| 13 | 2 { q.z } |
| 14 | else { q.w } |
| 15 | } |
| 16 | } |
| 17 | |
| 18 | fn (mut q Quad) set(i int, v f64) { |
| 19 | match i { |
| 20 | 0 { q.x = v } |
| 21 | 1 { q.y = v } |
| 22 | 2 { q.z = v } |
| 23 | else { q.w = v } |
| 24 | } |
| 25 | } |
| 26 | |
| 27 | // ritorna una nuova Quadrica somma del ricevente e di un'altra |
| 28 | fn (q &Quad) add(other &Quad) &Quad { |
| 29 | return &(Quad{q.x + other.x, q.y + other.y, q.z + other.z, q.w + other.w}) |
| 30 | } |
| 31 | |
| 32 | // ritorna una nuova Quadrica differenza tra il ricevente e un'altra |
| 33 | fn (q &Quad) sub(other &Quad) &Quad { |
| 34 | return &(Quad{q.x - other.x, q.y - other.y, q.z - other.z, q.w - other.w}) |
| 35 | } |
| 36 | |
| 37 | // ritorna una nuova Quadrica ottenuta negando il ricevente |
| 38 | fn (q &Quad) neg() &Quad { |
| 39 | return &(Quad{-q.x, -q.y, -q.z, -q.w}) |
| 40 | } |
| 41 | |
| 42 | // ritorna una nuova Quadrica ottenuta moltiplicando il ricevente per una costante |
| 43 | fn (q &Quad) mult(factor f64) &Quad { |
| 44 | return &(Quad{q.x * factor, q.y * factor, q.z * factor, q.w * factor}) |
| 45 | } |
| 46 | |
| 47 | // ritorna una nuova Quadrica ottenuta dividendo il ricevente per una costante |
| 48 | fn (q &Quad) div(factor f64) &Quad { |
| 49 | return &(Quad{q.x / factor, q.y / factor, q.z / factor, q.w / factor}) |
| 50 | } |
| 51 | |
| 52 | fn main() { |
| 53 | mut n := Quad{1, 2, 3, 4} |
| 54 | |
| 55 | println(n) |
| 56 | println(n.get(0)) |
| 57 | println(n.get(1)) |
| 58 | println(n.get(2)) |
| 59 | println(n.get(3)) |
| 60 | n.set(0, 5) |
| 61 | n.set(1, 6) |
| 62 | n.set(2, 7) |
| 63 | n.set(3, 8) |
| 64 | println(n) |
| 65 | println(n.get(0)) |
| 66 | println(n.get(1)) |
| 67 | println(n.get(2)) |
| 68 | println(n.get(3)) |
| 69 | } |
| 70 | |