Resources Numerical accuracy
Calculations
Every calculation under our calculation policies: what it works out, its formula and the precision it runs at. Open one to see its code as it is in the released app.
Calculations
-
Parameter nearest a picked point
Where along the curve a new control point is added.
nearest of 401 samples evenly spaced in the parameter
Splines: curve points, fitting and editing spline-cmd.js64-bit- CadCraft
-
Arc as a polyline segment
Turns an arc into a two-point polyline with a bulge.
ends = c + r(cos a, sin a); bulge = tan((a₁ − a₀) ÷ 4)
Splines: curve points, fitting and editing spline-cmd.js64-bit- CadCraft
-
Curve-fitted polyline
A polyline redrawn as a smooth curve through or along its vertices, kept as many short segments.
8 segments per knot span unless given
Splines: curve points, fitting and editing spline-cmd.js64-bit- CadCraft
-
Mass per meter of a section
The kilograms per meter shown for a steel section.
kg/m = published mass, else area (mm²) × 1e-6 × 7850
Standard sections: member solids, mass and parts list stdlib.js64-bit- CadCraft
-
Member solid
The faces of a straight member along two points, or of a column of a given height.
outline (mm) ÷ 1000; L = |b − a| × k; point = eₓ·u + e_y·(v + lift) + e_z·s
Standard sections: member solids, mass and parts list stdlib.js64-bit- CadCraft
-
Parts list quantities
Groups placed parts and adds up how many there are of each.
qty = Σ CC-QTY (1 when absent)
Standard sections: member solids, mass and parts list stdlib.js64-bit- CadCraft
-
Total mass in the parts list
The mass column of the parts list and its CSV.
mass = round(mass each × qty × 100) ÷ 100
Standard sections: member solids, mass and parts list stdlib.js64-bit- CadCraft
-
A level written as text
Reads a level such as 104.37, +104,37 or EL 104.37 from a text.
value = Number(whole digits . decimal digits) × sign
Survey levels from text and the survey check survey.js64-bit- CadCraft
- BimCraft
- CivilCraft
-
Levels into project units
A level point's x, y and z in project units.
x·k, y·k, z·k
Survey levels from text and the survey check survey.js64-bit- CadCraft
- BimCraft
- CivilCraft
-
Extent and distance from the origin
How far the data spans and how far it lies from zero, in meters.
span = |(maxX − minX, maxY − minY)| × m per unit; far = max |coordinate| × m per unit
Survey levels from text and the survey check survey.js64-bit- CadCraft
- BimCraft
- CivilCraft
-
Median
The middle value of a list of levels.
odd count: the middle value; even: mean of the two middle values
Survey levels from text and the survey check survey.js64-bit- CadCraft
- BimCraft
- CivilCraft
-
Level outliers
Counts levels that are far from the rest, and levels of exactly 0 that look like missing heights.
MAD = median(|z − median|) × 1.4826; limit = max(6 × MAD, 5 m); outlier when |z − median| > limit
Survey levels from text and the survey check survey.js64-bit- CadCraft
- BimCraft
- CivilCraft
-
Duplicate points
Counts points that sit on top of another point, with the same or a different level.
cell = 1 mm; key = (round(x ÷ cell), round(y ÷ cell)); same level when |Δz| ≤ cell
Survey levels from text and the survey check survey.js64-bit- CadCraft
- BimCraft
- CivilCraft
-
Drawing units to meters
A coordinate or length as the text the macro passes, in meters.
m = round₁₂(round₉(v) × mm per unit ÷ 1000)
Sketch exchange macro and import swsketch.js64-bit- CadCraft
-
Numbers written into the macro
A number as text in the macro.
v.toPrecision(15)
Sketch exchange macro and import swsketch.js64-bit- CadCraft
-
Millimeters per drawing unit
The size of the drawing's unit in millimeters.
inch 25.4; foot 304.8; yard 914.4; mil 0.0254; microinch 0.0000254
Sketch exchange macro and import swsketch.jsExact- CadCraft
-
Arc ends on export
The start and end points of an arc, which the macro needs beside its center.
start = c + r(cos a₀, sin a₀); end = c + r(cos a₁, sin a₁)
Sketch exchange macro and import swsketch.js64-bit- CadCraft
-
Center of a polyline arc segment
The center of the arc between two polyline vertices with a bulge.
θ = 4·atan(b); r = |chord ÷ (2·sin(θ ÷ 2))|; center = middle ± r·cos(θ ÷ 2) across the chord
Sketch exchange macro and import swsketch.js64-bit- CadCraft
-
Dimension values on export
The value given to each dimension in the macro.
angle: degrees × π ÷ 180; length: M(value)
Sketch exchange macro and import swsketch.js64-bit- CadCraft
-
Arcs on import
Builds an arc from the center, start and end points of an imported sketch.
r = |start − center|; a₀ = atan2(start − center); a₁ = atan2(end − center), each in [0, 2π)
Sketch exchange macro and import swsketch.js64-bit- CadCraft
-
Dimension values on import
The value each imported dimension gets, and the parameter that drives it.
parameter = round(value × 1e9) ÷ 1e9
Sketch exchange macro and import swsketch.js64-bit- CadCraft
-
The line or circle under a pick
Reads the picked object as an endless line with a unit direction, or as a full circle.
direction = (p₂ − p₁) ÷ |p₂ − p₁|
Circles tangent to two or three objects tancircle.js64-bit- CadCraft
-
Objects offset by the radius
A line moved to both sides by r, and a circle grown and shrunk by r.
line: p ± n·r; circle: R + r and |R − r|
Circles tangent to two or three objects tancircle.js64-bit- CadCraft
-
Where two offset objects cross
The crossing points of two lines, a line and a circle, or two circles.
line–circle: t = −B ± √(B² − C), C = |f|² − r²; circles: l = (r₁² − r₂² + d²) ÷ 2d, h = √(r₁² − l²)
Circles tangent to two or three objects tancircle.js64-bit- CadCraft
-
Is a circle tangent to an object
Checks a candidate circle against a line or a circle.
line: | |distance to line| − r | ≤ tol; circle: |d − (R + r)| ≤ tol or |d − |R − r|| ≤ tol
Circles tangent to two or three objects tancircle.js64-bit- CadCraft
-
Tangent, tangent, radius
The circle of radius r tangent to two picked objects, nearest the picks.
center = crossing of a offset by r and b offset by r; tol = 1e-7 × max(1, size of a, b and r)
Circles tangent to two or three objects tancircle.js64-bit- CadCraft
-
Newton solve for three tangents
Solves the three tangency equations for a circle's center and radius from one starting guess.
F(x, y, r) = 0; J by forward differences with h = 1e-7 × max(1, |x|, |y|, |r|); step = −J⁻¹F by Cramer's rule
Circles tangent to two or three objects tancircle.js64-bit- CadCraft
-
Tangent, tangent, tangent
The circle tangent to three picked objects, nearest the picks.
8 sign choices × 18 starting guesses round the picks; kept when tangent to all three within 10 × tol
Circles tangent to two or three objects tancircle.js64-bit- CadCraft
-
Touch point and choice by the picks
Where a circle touches an object, and which candidate circle touches nearest the picked points.
line: foot of the center on the line; circle: point of o on the line of centers
Circles tangent to two or three objects tancircle.js64-bit- CadCraft
-
Height unit factor
The factor that turns a file's heights into the project's unit.
factor = meters per file unit ÷ meters per project unit
Elevation grids into survey points and a grid surface terrain.js64-bit- CadCraft
- BimCraft
- CivilCraft
-
Cell center in the file's coordinates
The x and y of a raster cell's center.
x = g₀ + (col + 0.5)·g₁ + (row + 0.5)·g₂; y = g₃ + (col + 0.5)·g₄ + (row + 0.5)·g₅
Elevation grids into survey points and a grid surface terrain.js64-bit- CadCraft
- BimCraft
- CivilCraft
-
Cells inside a box
The range of columns and rows whose centers can fall inside a picked box.
(col, row) = G⁻¹·(x − g₀, y − g₃) − 0.5; c₀ = ⌈min − 1e-9⌉, c₁ = ⌊max + 1e-9⌋ + 1
Elevation grids into survey points and a grid surface terrain.js64-bit- CadCraft
- BimCraft
- CivilCraft
-
A box through a coordinate conversion
The box round a rectangle after its outline is converted to another coordinate system.
17 points along each side, converted, then minimum and maximum
Elevation grids into survey points and a grid surface terrain.js64-bit- CadCraft
- BimCraft
- CivilCraft
-
Survey points from a grid
One survey point per grid node that has a height.
(x, y) = conversion(cell center); z = file height × unit factor
Elevation grids into survey points and a grid surface terrain.js64-bit- CadCraft
- BimCraft
- CivilCraft
-
Grid surface
A triangulated surface from the grid: two triangles per cell.
cell corners a (SW), b (SE), c (NE), d (NW): triangles a–b–c and a–c–d
Elevation grids into survey points and a grid surface terrain.js64-bit- CadCraft
- BimCraft
- CivilCraft
-
1-2-5 step
Rounds a step up to 1, 2 or 5 times a power of ten.
p = 10^⌊log₁₀ x⌋; m = x ÷ p; 1, 2, 5 or 10 × p
Elevation grids into survey points and a grid surface terrain.js64-bit- CadCraft
- BimCraft
- CivilCraft
-
Ray angles
The directions offered at every multiple of the angle step.
aᵢ = start + i × step × (π ÷ 180), i = 0 … round(360 ÷ step) − 1
Polar and object snap tracking tracking.js64-bit- CadCraft
-
Pointer projected onto a ray
The point of a ray nearest the pointer, and how far the pointer is from it.
t = (q − p)·u; point = p + u·t, u = (cos a, sin a)
Polar and object snap tracking tracking.js64-bit- CadCraft
-
Crossing of two tracking rays
The point where rays from two acquired points cross.
den = a × b; t = ((B − A) × b) ÷ den; point = A + a·t
Polar and object snap tracking tracking.js64-bit- CadCraft
-
User coordinates to world
A point or direction typed in the user coordinate system, in world coordinates.
x = u.x + pₓ·cos − p_y·sin; y = u.y + pₓ·sin + p_y·cos
User coordinate systems ucs.js64-bit- CadCraft
-
World coordinates to user
A world point in the user coordinate system, as shown in coordinates and prompts.
d = p − origin; x = dₓ·cos + d_y·sin; y = −dₓ·sin + d_y·cos
User coordinate systems ucs.js64-bit- CadCraft
-
Is a coordinate system the world
Normalizes a coordinate system and stores it as the world when it is the same.
world when |x| < 1e-12, |y| < 1e-12 and angle within 1e-12 of 0 or 2π
User coordinate systems ucs.js64-bit- CadCraft
-
Coordinate system from an origin and an X-axis point
The coordinate system whose X axis runs from one picked point through another.
angle = atan2(p_y − o_y, pₓ − oₓ)
User coordinate systems ucs.js64-bit- CadCraft
-
Coordinate system from a polyline segment
The coordinate system at the start of the polyline segment picked, with X along it.
angle = atan2 of (point at 0.001 of the segment − its start)
User coordinate systems ucs.js64-bit- CadCraft
-
Pointer position to drawing coordinates
The drawing point under a screen position, in the active pane.
u = (sx − w ÷ 2) ÷ zoom; v = (h ÷ 2 − sy) ÷ zoom; x = cx + cos(tw)·u − sin(tw)·v; y = cy + sin(tw)·u + cos(tw)·v
Picked points, object snaps and viewport views view.js64-bit- CadCraft
-
Object snap under the pointer
The best snap point (endpoint, midpoint, center, intersection and so on) within the aperture of the pointer.
r = px ÷ zoom; keep candidates with |c − p| ≤ r; lowest priority number wins, then the smallest distance
Picked points, object snaps and viewport views view.js64-bit- CadCraft
-
Viewport view after pan or zoom inside it
The center, scale and twist an entered sheet viewport shows on screen, returned for the caller to store in the viewport when they differ from the stored ones.
M = P⁻¹ · T; s = √(M₀² + M₁²); tw = atan2(M₁, M₀); center = M⁻¹ · (vp.x, vp.y)
Picked points, object snaps and viewport views view.js64-bit- CadCraft
-
View to matrix
The drawing-to-pixel matrix of a view for a pane of a given size.
[z·c, z·s, z·s, −z·c, w ÷ 2 − z·(c·cx + s·cy), h ÷ 2 + z·(−s·cx + c·cy)] with c = cos(tw), s = sin(tw), z = zoom
Picked points, object snaps and viewport views view.js64-bit- CadCraft
-
Matrix to view
Reads the center, zoom and turn back out of a drawing-to-pixel matrix.
zoom = √(A₀² + A₁²); tw = atan2(A₁, A₀); center = A⁻¹ · (w ÷ 2, h ÷ 2)
Picked points, object snaps and viewport views view.js64-bit- CadCraft
-
Inverse of a 2 × 3 matrix
The inverse of a drawing-to-pixel matrix.
det = m₀·m₃ − m₁·m₂; inverse = adjugate ÷ det
Picked points, object snaps and viewport views view.js64-bit- CadCraft
A calculation is added only after its source was read. Each statement can be checked in the code shown on its policy's page; the app repositories are public. When a release changes a calculation, its page says so until it has been read again.