The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.

Next: , Previous: Arithmetic, Up: Arithmetic



3.1.4.1 Two-operand (binary) forms and precedence

Most two-operand binary forms have meanings dependent on the types of their arguments. An exhaustive summary of the possibilities is given in the following table.

Left Op Right Result Description
scalar + scalar scalar Scalar sum.
vector + vector vector Vector sum.
point + vector point Point-vector affine sum.
vector + point " "
scalar - scalar scalar Scalar difference.
vector - vector vector Vector difference.
point - point vector Point-point affine difference.
point - vector point Point-vector affine difference.
scalar * or . scalar scalar Scalar product.
scalar * or . vector vector Scalar-vector product.
vector * or . scalar " "
vector * vector vector Vector cross-product.
vector . vector scalar Vector dot product.
scalar ^ scalar scalar Raise scalar to scalar power.
transform ^ integer transform Raise transform or integer power.
transform * or . point point Affine point transform (right-to-left).
transform * or . vector vector Affine vector transform (right-to-left).
transform * or . transform transform Transform composition (right-to-left).
point then transform point Affine point transform (left-to-right).
vector then transform vector Affine vector transform (left-to-right).
transform then transform transform Transform composition (left-to-right).
scalar / scalar scalar Scalar division.
vector / scalar vector Vector component-wise division by scalar.
point ' x, y, or z scalar Point component extraction.
vector ' x, y, or z scalar Vector component extraction.


Operator precedence is shown in this table.

Op Precedence
' highest (most tightly binding)
^
- (unary negation)
* . /
+ -
then lowest (least tightly binding)


All operations are left-associative except for ^. Parentheses ( ) are used for grouping to override precedence in the usual way.

As you can see, the dot operator . is usually a synonym for run-of-the-mill multiplication, *. The meanings differ only for vector operands. The then operator merely reverses the operand order with respect to normal multiplication *. The intent here is to make compositions read more naturally. The code

     (1,2,3) then scale(2) then rotate(30) then translate([1,3,0])

expresses a series of successive modifications to the point, whereas the equivalent form

     translate([1,3,0]) * rotate(30) * scale(2) * (1,2,3)

will be intuitive only to mathematicians (and perhaps Arabic language readers).

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.