HyperFun: Operators and Expressions
There are two types of expressions permissible in the language:
'functional' expression and 'logical' expression.
- Functional expression
The functional expression is a conventional numerical expression
built with using:
- Arithmetic operators
There are usual arithmetic operators, all of them always result in a
floating point (double) number:
- Addition ('+'), e.g., 5 + 0.2;
'+' is also used as unary in prefix form, e.g., +100;
- Subtraction ('-'), e.g. 5 - 0.2;
'-' is also used as unary in prefix form, e.g., -100;
- Multiplication ('*'), e.g., 5 * 0.2;
- Division ('/'), e.g., 5 / 0.2;
- Power ('^'), e.g., 5^0.2;
- Special geometric operators
There are the following geometric operators relevant for F-rep that
are applied to any functional expressions semantically treated as
- Set-theoretic union '|' used in infix form as binary operator,
e.g., sphere1 | sphere2;
- Set-theoretic intersection '&'used in infix form as binary operator,
e.g., sphere1 & sphere2;
- Set-theoretic subtraction (difference) '\'used in infix form as binary
e.g., sphere1 \ sphere2;
- Set-theoretic negation '~' used in prefix form as unary operator,
- Set-theoretic Cartesian product '@' used in infix form as binary operator,
e.g., disk @ segment.
- Standard mathematical functions
The following mathematical functions taking any
numerical (functional) expressions and resulting in double number can
be used in the functional expressions:
'sqrt', 'exp', 'log', 'logd', 'sin', 'cos', 'tan', 'asin', 'acos',
'atan', 'abs', 'sinh', 'cosh', 'tanh', 'sign'.
'max', 'min', 'atan2', 'mod'.
F-rep library functions
An extendible F-rep library contains functions representing geometric
primitives and transformations. Each function has its own set of arguments,
all of which are functional expressions. The result is a real number.
Examples of library functions:
- Sphere: hfSphere;
- Ellipsoid: hfEllipsoid;
- Torus with x, y, z axes: hfTorusX, hfTorusY, hfTorusZ;
- Cylinder with x, y, z axes: hfCylX, hfCylY, hfCylZ;
- Block: hfBlock;
- Blobby object: hfBlobby;
- Metaball object: hfMetaball;
- Soft object: hfSoft;
- Scaling tranformation: hfScale3D;
- Shift (translation): hfShift3D;
- Rotation around x, y, z axes: hfRotate3DX, hfRotate3DY, hfRotate3DZ;
- Blending union: hfBlendUni;
- Blending intersection: hfBlendInt;
- Twisting around x, y, z axes: hfTwistX, hfTwistY, hfTwistZ;
- Stretch: hfStretch3D;
- Tapering along x, y, z axes: hfTaperX, hfTaperY, hfTaperZ.
There can be references in the functional expression to
defined in the same program or saved in the special library.
The form of a corresponding call stems from a syntax of object's head.
The logical expression is built of functional expressions as its arguments,
with using relational and boolean operators. The functional expression value '0'
is treated as boolean 'false'; other values are treated as 'true' in the logical expressions.
There are the following relational operators:
'<', '>', '<=', '>=', '=', '/='.
There are two infix boolean operators ('and', 'or') and one being used in prefix form ('not').
i < 4;
(x = a and (2 <= xx < 5.5))
In both kinds of expressions, parentheses can be used by a
traditional manner and are recommended for usage to make expressions
structure more clear. The rules of precedence in the expressions are
also traditional. Note only that the special geometric operators have
lower precedence (and accordingly are executed later) than the