draw2d/postscript-go/src/pkg/postscript/operators_math.go

82 lines
2.1 KiB
Go
Raw Normal View History

package postscript
import (
"math"
)
// begin Primitive Operator implementation
func add(interpreter *Interpreter) {
f2 := interpreter.PopFloat()
f1 := interpreter.PopFloat()
interpreter.Push(f1 + f2)
}
func sub(interpreter *Interpreter) {
f2 := interpreter.PopFloat()
f1 := interpreter.PopFloat()
interpreter.Push(f1 - f2)
}
func div(interpreter *Interpreter) {
f2 := interpreter.PopFloat()
f1 := interpreter.PopFloat()
interpreter.Push(f1 / f2)
}
func mul(interpreter *Interpreter) {
f2 := interpreter.PopFloat()
f1 := interpreter.PopFloat()
interpreter.Push(f1 * f2)
}
func sqrt(interpreter *Interpreter) {
f := interpreter.PopFloat()
interpreter.Push(float(math.Sqrt(float64(f))))
}
func atan(interpreter *Interpreter) {
den := interpreter.PopFloat()
num := interpreter.PopFloat()
interpreter.Push(float(math.Atan2(float64(num), float64(den))) * (180.0 / math.Pi))
}
func cos(interpreter *Interpreter) {
a := interpreter.PopFloat()
interpreter.Push(float(math.Cos(float64(a))) * (180.0 / math.Pi))
}
func sin(interpreter *Interpreter) {
a := interpreter.PopFloat()
interpreter.Push(float(math.Sin(float64(a))) * (180.0 / math.Pi))
}
func neg(interpreter *Interpreter) {
f := interpreter.PopFloat()
interpreter.Push(-f)
}
func round(interpreter *Interpreter) {
f := interpreter.PopFloat()
interpreter.Push(float(int(f + 0.5)))
}
func abs(interpreter *Interpreter) {
f := interpreter.PopFloat()
interpreter.Push(float(math.Fabs(float64(f))))
}
func initMathOperators(interpreter *Interpreter) {
interpreter.SystemDefine("add", NewOperator(add))
interpreter.SystemDefine("sub", NewOperator(sub))
interpreter.SystemDefine("mul", NewOperator(mul))
interpreter.SystemDefine("div", NewOperator(div))
interpreter.SystemDefine("sqrt", NewOperator(sqrt))
interpreter.SystemDefine("cos", NewOperator(cos))
interpreter.SystemDefine("sin", NewOperator(sin))
interpreter.SystemDefine("atan", NewOperator(atan))
interpreter.SystemDefine("neg", NewOperator(neg))
interpreter.SystemDefine("round", NewOperator(round))
interpreter.SystemDefine("abs", NewOperator(abs))
}