70 lines
1.4 KiB
V
70 lines
1.4 KiB
V
struct Quad {
|
|
mut:
|
|
x f64
|
|
y f64
|
|
z f64
|
|
w f64
|
|
}
|
|
|
|
fn (q Quad) get(i int) f64 {
|
|
return match i {
|
|
0 { q.x }
|
|
1 { q.y }
|
|
2 { q.z }
|
|
else { q.w }
|
|
}
|
|
}
|
|
|
|
fn (mut q Quad) set(i int, v f64) {
|
|
match i {
|
|
0 { q.x = v }
|
|
1 { q.y = v }
|
|
2 { q.z = v }
|
|
else { q.w = v }
|
|
}
|
|
}
|
|
|
|
// ritorna una nuova Quadrica somma del ricevente e di un'altra
|
|
fn (q &Quad) add(other &Quad) &Quad {
|
|
return &(Quad{q.x + other.x, q.y + other.y, q.z + other.z, q.w + other.w})
|
|
}
|
|
|
|
// ritorna una nuova Quadrica differenza tra il ricevente e un'altra
|
|
fn (q &Quad) sub(other &Quad) &Quad {
|
|
return &(Quad{q.x - other.x, q.y - other.y, q.z - other.z, q.w - other.w})
|
|
}
|
|
|
|
// ritorna una nuova Quadrica ottenuta negando il ricevente
|
|
fn (q &Quad) neg() &Quad {
|
|
return &(Quad{-q.x, -q.y, -q.z, -q.w})
|
|
}
|
|
|
|
// ritorna una nuova Quadrica ottenuta moltiplicando il ricevente per una costante
|
|
fn (q &Quad) mult(factor f64) &Quad {
|
|
return &(Quad{q.x * factor, q.y * factor, q.z * factor, q.w * factor})
|
|
}
|
|
|
|
// ritorna una nuova Quadrica ottenuta dividendo il ricevente per una costante
|
|
fn (q &Quad) div(factor f64) &Quad {
|
|
return &(Quad{q.x / factor, q.y / factor, q.z / factor, q.w / factor})
|
|
}
|
|
|
|
fn main() {
|
|
mut n := Quad{1, 2, 3, 4}
|
|
|
|
println(n)
|
|
println(n.get(0))
|
|
println(n.get(1))
|
|
println(n.get(2))
|
|
println(n.get(3))
|
|
n.set(0, 5)
|
|
n.set(1, 6)
|
|
n.set(2, 7)
|
|
n.set(3, 8)
|
|
println(n)
|
|
println(n.get(0))
|
|
println(n.get(1))
|
|
println(n.get(2))
|
|
println(n.get(3))
|
|
}
|