added param type check + some functions
This commit is contained in:
32
src/vec.typ
32
src/vec.typ
@@ -1,20 +1,43 @@
|
||||
#let is-vec(vec) = {
|
||||
if type(vec) != dictionary {return false}
|
||||
if vec.at("type", default: none) != "vector" {return false}
|
||||
return true
|
||||
}
|
||||
|
||||
#let _check(vec) = {
|
||||
if not is-vec(vec) {
|
||||
panic("Argument is not a vector")
|
||||
}
|
||||
}
|
||||
|
||||
#let vec(..args) = {
|
||||
let comps = args.pos()
|
||||
let size = comps.len()
|
||||
return (
|
||||
type: "vector",
|
||||
comps: comps,
|
||||
size: size
|
||||
)
|
||||
}
|
||||
|
||||
#let copy(vec) = {
|
||||
_check(vec)
|
||||
return vec(..vec.comps)
|
||||
}
|
||||
|
||||
#let of-size(size) = {
|
||||
let comps = (0,) * size
|
||||
return vec(..comps)
|
||||
}
|
||||
|
||||
#let display(vec) = math.vec(..vec.comps.map(c => [#c]))
|
||||
#let display(vec) = {
|
||||
_check(vec)
|
||||
math.vec(..vec.comps.map(c => [#c]))
|
||||
}
|
||||
|
||||
#let add(vec1, vec2) = {
|
||||
_check(vec1)
|
||||
_check(vec2)
|
||||
if vec1.size != vec2.size {
|
||||
panic("Can't add vectors of size " + str(vec1.size) + " and " + str(vec2.size))
|
||||
}
|
||||
@@ -24,6 +47,8 @@
|
||||
}
|
||||
|
||||
#let sub(vec1, vec2) = {
|
||||
_check(vec1)
|
||||
_check(vec2)
|
||||
if vec1.size != vec2.size {
|
||||
panic("Can't subtract vectors of size " + str(vec1.size) + " and " + str(vec2.size))
|
||||
}
|
||||
@@ -33,6 +58,8 @@
|
||||
}
|
||||
|
||||
#let dot(vec1, vec2) = {
|
||||
_check(vec1)
|
||||
_check(vec2)
|
||||
if vec1.size != vec2.size {
|
||||
panic("Can't compute dot product of vectors of size " + str(vec1.size) + " and " + str(vec2.size))
|
||||
}
|
||||
@@ -45,6 +72,8 @@
|
||||
}
|
||||
|
||||
#let cross(vec1, vec2) = {
|
||||
_check(vec1)
|
||||
_check(vec2)
|
||||
if vec1.size != 3 or vec2.size != 3 {
|
||||
panic("Can only compute cross product of vectors of size 3")
|
||||
}
|
||||
@@ -60,6 +89,7 @@
|
||||
}
|
||||
|
||||
#let to-mat(vec) = {
|
||||
_check(vec)
|
||||
import "mat.typ" as _mat
|
||||
return _mat.mat(..vec.comps.map(c => (c,)))
|
||||
}
|
||||
Reference in New Issue
Block a user