MathUtil

From MiniScript Wiki
Jump to navigation Jump to search

In Mini Micro, mathUtil is an import module in the /sys/lib directory. It provides various additional math-related functions and constants.

Like all the modules in /sys/lib, the best documentation for mathUtil is the source code (/sys/lib/mathUtil.ms) itself. But this page summarizes the content in more concise form.

Constant

Name Value / Purpose
mathUtil.e Euler's number, roughly 2.718; base of natural logarithms

Methods

The following methods are normally accessed via the mathUtil prefix, e.g. mathUtil.radToDeg(pi).

Method Returns
ln(x) natural logarithm of x
radToDeg(radians) converts radians into degrees
degToRad(radians) converts degrees into radians
moveTowards(num, targetNum, maxChange=1) returns a value closer to targetNum from num, differing from num by no more than maxChange)
moveTowardsXY(mover, target, maxDist=1) like moveTowards, but mutates map mover to approach target, each with x and y properties (e.g., a Sprite)
distance(p1, p2) find the distance between two points; each may be a map containing x and y', or an [x, y] list
lerp(a, b, t) returns a value some portion t of the way from a to b
lerp2d(p1, p2, t) same as lerp, but on 2d points (maps or lists)
proportionAlongLine(endA, endB, p) returns how far p is along the line from endA to endB
nearestPointOnLine(endA, endB, p) returns closest point to p on the line from endA to endB as an [x, y] list
nearestPointOnLineSegment(endA, endB, p) same as nearestPointOnLine, but limited to not go beyond the range from endA to endB
distanceToLine(endA, endB, p) returns distance from p to the line from endA to endB
distanceToLineSegment(endA, endB, p) same as distanceToLine, but limited to not go beyond the range from endA to endB
polyPerimeter(polygon) returns total distance around polygon (given as list of [x, y]] points)
polyArea(polygon) returns area of polygon (given as list of [x, y]] points)
pointInPoly(point, polygon) returns true if point (an [x, y] point) is contained within polygon; or if point is a list of ['x, y] points, returns true if any of those points are within polygon
offsetPoly(polygon, delta) returns a new polygon by insetting/growing polygon by the given amount
shiftPoly(polygon, dx, dy) returns a new polygon by translating polygon by the given amounts
rotatePoly(polygon, degrees) returns a new polygon by rotating polygon by degrees clockwise
randNormal(mean=0, stddev=1) returns a normally-distributed random number
randRange(min, max) returns a random number between min and max
dice(numberOfDice=1, sides=6) roll numberOfDice dice, each with values from 1 to sides, and return the sum
clamp(x, minval=0, maxval'=1) return x limited to the range minval to maxval
numToStr(n, precision) convert n to a string, with a specified number of digits past the decimal place, with trailing zeros

Example

The following program creates a sprite, then uses mathUtil.moveTowardsXY to make it chase the mouse.

import "mathUtil"
s = new Sprite
s.image = file.loadImage("/sys/pics/Wumpus.png")
display(4).sprites.push s
while true
	mathUtil.moveTowardsXY s, mouse, 10
	yield
end while