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
-
Polyline vertices read
Reads the vertices of a lightweight polyline.
DWG object values written and read dwg/objects-read.js64-bit- CadCraft
- BimCraft
- ModelCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
- PartCraft
-
North direction of older geolocation data
Turns the north angle of a version 1 geolocation object into a direction vector.
north = (sin a, cos a)
DWG object values written and read dwg/objects-read.js64-bit- CadCraft
- BimCraft
- ModelCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
- PartCraft
-
Fit point parameters and knots
The parameter of each fit point along the spline, and the knot vector built from them.
u₀ = 0; uᵢ = uᵢ₋₁ + |Qᵢ − Qᵢ₋₁|; knots = [0,0,0,0, u₁ … uₙ₋₂, L,L,L,L]
Spline through fit points dwg/spline-fit.js64-bit- CadCraft
- BimCraft
- ModelCraft
- TakeoffCraft
- CivilCraft
-
Cubic basis functions at a parameter
The four B-spline basis values that weigh the control points at one fit point.
Cox–de Boor recurrence, degree 3
Spline through fit points dwg/spline-fit.js64-bit- CadCraft
- BimCraft
- ModelCraft
- TakeoffCraft
- CivilCraft
-
Start condition
The rows that pin the first control point and set the spline's start tangent or a natural start.
P₀ = Q₀; P₁ − P₀ = T₀ × u₄ ÷ 3 or P₀ ÷ u₄ − P₁ (1 ÷ u₄ + 1 ÷ u₅) + P₂ ÷ u₅ = 0
Spline through fit points dwg/spline-fit.js64-bit- CadCraft
- BimCraft
- ModelCraft
- TakeoffCraft
- CivilCraft
-
End condition
The rows that pin the last control point and set the spline's end tangent or a natural end.
Pₘ₋₁ = Qₙ₋₁; Pₘ₋₁ − Pₘ₋₂ = T₁ × (L − uₘ₋₁) ÷ 3 or the zero second derivative row
Spline through fit points dwg/spline-fit.js64-bit- CadCraft
- BimCraft
- ModelCraft
- TakeoffCraft
- CivilCraft
-
Solve for the control points
Solves the banded system for the x, y and z of every control point.
A · P = B
Spline through fit points dwg/spline-fit.js64-bit- CadCraft
- BimCraft
- ModelCraft
- TakeoffCraft
- CivilCraft
-
A load split onto the member's axes
Turns one point or distributed load in a global or local direction into pieces along the member's own three axes.
piece = load × (direction · local axis); a, b clamped to [0, L]
Frame analysis: loads, releases, end forces and reactions frame/frame-solve.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Inverse of the released block
Inverts the small stiffness block of a member's released end actions.
Gauss–Jordan with partial pivoting
Frame analysis: loads, releases, end forces and reactions frame/frame-solve.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Member stiffness with released ends
Removes pinned or sliding end actions from a member's 12 × 12 stiffness.
k_c = k_kk − k_kr · k_rr⁻¹ · k_rk
Frame analysis: loads, releases, end forces and reactions frame/frame-solve.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Fixed-end loads with released ends
Moves the load a released end cannot carry onto the member's other end actions.
p_c = p_k − k_kr · k_rr⁻¹ · p_r
Frame analysis: loads, releases, end forces and reactions frame/frame-solve.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Member stiffness in global axes
Turns a member's stiffness from its own axes to the model's.
k_g = Tᵀ · k · T, by 3 × 3 blocks
Frame analysis: loads, releases, end forces and reactions frame/frame-solve.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Directions nothing stiffens
Finds translations and rotation directions at a node that no member resists, so they can be held instead of stopping the run.
translation: diagonal + spring ≤ 1e-14 × largest diagonal; rotation: eigenvalue ≤ 1e-10 × largest rotational diagonal
Frame analysis: loads, releases, end forces and reactions frame/frame-solve.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Eigenvalues of a symmetric 3 × 3 matrix
The principal stiffnesses and directions of the rotation block at a node.
cyclic Jacobi rotations; t = sign(θ) ÷ (|θ| + √(θ² + 1))
Frame analysis: loads, releases, end forces and reactions frame/frame-solve.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Loads of a case or combination
Adds up node forces and member loads of every case in a set, each times its factor, including the members' own weight.
own weight w = −factor × f × ρ × 1e-9 × A × g (N/mm along −Z)
Frame analysis: loads, releases, end forces and reactions frame/frame-solve.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Member end forces and reactions
The six forces at each end of every member and the forces at the supports, from the solved displacements.
f = k_c · u_local − p_c; reaction = Σ Tᵀ f − loads applied at the node
Frame analysis: loads, releases, end forces and reactions frame/frame-solve.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
One step of iterative refinement
Solves the leftover out-of-balance once more and adds the correction to the displacements.
r = loads − member forces; x₂ = x + K⁻¹ r, kept if max |r₂| < max |r|
Frame analysis: loads, releases, end forces and reactions frame/frame-solve.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Sum of the reactions
The total force and moment of all support reactions, for the equilibrium check printed in the report.
ΣF = Σ R; ΣM = Σ (M + r × R) about the global origin
Frame analysis: loads, releases, end forces and reactions frame/frame-solve.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Sum of the applied loads
The total force and moment of every load of a set about the global origin.
ΣF = Σ F; ΣM = Σ (M + r × F); distributed loads by 4-point Gauss
Frame analysis: loads, releases, end forces and reactions frame/frame-solve.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Linear combination of results
Adds computed load sets, each times a factor, into one result.
u = Σ fᵢ uᵢ, the same for end forces, reactions, loads and totals
Frame analysis: loads, releases, end forces and reactions frame/frame-solve.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Cleaning an outline
Removes repeated points and corners that lie on a straight run, and makes the outline counter-clockwise.
drop a point when |p − q| ≤ 1e-6; drop a corner when |cross| ≤ 1e-9 × |b − a|²
Meshing a slab or wall into plates frame/plate-mesh.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Is the outline square-cornered
Finds the turn that makes every edge of the outline and its openings run along one of two square directions.
turn = atan2 of the longest edge; each edge: min(|dx|, |dy|) ≤ 1e-6 × max(1, length)
Meshing a slab or wall into plates frame/plate-mesh.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Grid mesh
Lays grid lines through every corner and given point and divides each gap into equal parts no longer than the size asked for.
n = ⌈gap ÷ size − 1e-9⌉; line_j = a + (b − a) × j ÷ n
Meshing a slab or wall into plates frame/plate-mesh.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Point inside a polygon
Decides whether a grid cell's center lies inside the outline or inside an opening.
even–odd crossing count
Meshing a slab or wall into plates frame/plate-mesh.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Mesh of a four-corner outline
A structured mesh between the opposite edges of a convex four-corner outline.
P(s, t) = (1 − s)(1 − t) P₀ + s (1 − t) P₁ + s t P₂ + (1 − s) t P₃; s = i ÷ n, t = j ÷ m
Meshing a slab or wall into plates frame/plate-mesh.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Cutting an outline into triangles
Ear clipping of an outline that is neither square-cornered nor four-cornered.
an ear: cross(a, b, c) > 1e-12 and no other corner inside
Meshing a slab or wall into plates frame/plate-mesh.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Triangles into quadrilaterals
Cuts each triangle into three quadrilaterals and each of those into k × k plates.
k = ⌈longest edge ÷ 2 ÷ size − 1e-9⌉; nodes by bilinear blend
Meshing a slab or wall into plates frame/plate-mesh.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Mesh quality
The largest side ratio and the smallest corner angle of the plates.
aspect = longest side ÷ shortest side; angle = acos(u·v ÷ (|u| |v|))
Meshing a slab or wall into plates frame/plate-mesh.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Mesh nodes onto model nodes
Uses an existing node of the frame for a mesh node that lies within the merge tolerance of it, else adds a new node.
|existing − new| ≤ tol (1 mm by default)
Meshing a slab or wall into plates frame/plate-mesh.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Wall plates
Meshes a vertical wall along a line in plan between two heights.
node = from + e_x × u, z = z₀ + v; e_x = (to − from) ÷ L
Meshing a slab or wall into plates frame/plate-mesh.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Is a plate a proper quadrilateral
Refuses a plate whose corners are in a line or folded over.
each corner: (e₁ × e₂) · n ÷ |n| > 1e-3 × |e₁| × |e₂|
Meshing a slab or wall into plates frame/plate-model.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Nodes of a rigid floor by height
Collects the nodes that belong to a floor given by its height.
|z_node − z_floor| ≤ tol (1 mm by default)
Meshing a slab or wall into plates frame/plate-model.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
A number as report text
Writes a value with a fixed number of decimals.
text = v.toFixed(d); 0 when |v| < 0.5 × 10⁻ᵈ
Numbers in the frame analysis report frame/frame-report.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Force in kN
A force in newtons printed in kilonewtons.
kN = N ÷ 1000, 2 decimals; kN·m = N·mm ÷ 10⁶, 2 decimals
Numbers in the frame analysis report frame/frame-report.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Reactions, largest displacement and the envelope
Gathers each set's reactions, the node that moves most, each member's extremes, and the largest value of each force over all sets.
displacement = √(ux² + uy² + uz²); envelope = the value with the largest magnitude over the sets
Numbers in the frame analysis report frame/frame-report.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Deflection as a span ratio
Prints a member's deflection as L over a whole number.
'L/' + round(L ÷ deflection)
Numbers in the frame analysis report frame/frame-report.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Demand and capacity as text
Prints a design check's demand and capacity in kN or kN·m.
kN = round(N ÷ 10) ÷ 100; kN·m = round(N·mm ÷ 10⁴) ÷ 100; ratios to 3 decimals
Numbers in the frame analysis report frame/frame-design.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Utilization as a percentage
Prints a utilization ratio as a percentage with one decimal.
round(ratio × 1000) ÷ 10, 1 decimal
Numbers in the frame analysis report frame/frame-design.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
A number in the concrete and seismic tables
Writes a value with a chosen number of decimals.
round(v × 10ᵈ) ÷ 10ᵈ, then d decimals
Numbers in the frame analysis report frame/frame-concrete.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Values in the shared problem list
The found and required values attached to a failed concrete check or drift.
utilization rounded to 0.0001; drift rounded to 0.01 mm
Numbers in the frame analysis report frame/frame-concrete.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Slab and wall rows of the report
For each slab or wall: its largest deflection, its largest positive and negative moments, twisting moment and shear.
max and min of the plates' center values; Q = √(Qx² + Qy²); w = largest node displacement; kN·m/m = N·mm/mm ÷ 1000, 2 decimals
Numbers in the frame analysis report frame/plate-draw.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Values in a slab problem
The required and provided steel, or the shear and its strength, attached to a failed slab check.
steel rounded to 0.1 mm²/m; shear to 0.1 kN/m
Numbers in the frame analysis report frame/slab-design.js64-bit- CadCraft
- BimCraft
- DetailCraft
-
Add, subtract, multiply, divide
The four arithmetic functions on integers and reals.
all integers: 32-bit result; any real: 64-bit result; integer ÷ integer truncates toward zero
LISP arithmetic, conversions and geometry lisp/builtins.js64-bit- CadCraft
-
FIX: a real to an integer
Drops the fraction of a number.
int(trunc(x))
LISP arithmetic, conversions and geometry lisp/builtins.js64-bit- CadCraft
-
Square root, exponential, logarithm and power
SQRT, EXP, LOG and EXPT.
Math.sqrt, Math.exp, Math.log, Math.pow
LISP arithmetic, conversions and geometry lisp/builtins.js64-bit- CadCraft
-
EQUAL with a fuzz
Whether two numbers or lists of numbers are equal within a given amount.
|a − b| ≤ fuzz
LISP arithmetic, conversions and geometry lisp/builtins.js64-bit- CadCraft
-
RTOS: a number as text
Formats a length in decimal or in the drawing's other length formats.
decimal: v.toFixed(prec); 0 when |v| < 0.5 × 10⁻ᵖʳᵉᶜ
LISP arithmetic, conversions and geometry lisp/builtins.js64-bit- CadCraft
-
ANGTOS: an angle as text
Formats an angle in degrees, degrees-minutes-seconds, grads, radians or surveyor's bearings.
degrees = a × 180 ÷ π; grads = a × 200 ÷ π; minutes = (deg − whole) × 60
LISP arithmetic, conversions and geometry lisp/builtins.js64-bit- CadCraft
-
ANGTOF: text to an angle
Reads an angle written in any of the angle formats and returns radians.
degrees × π ÷ 180; d + m ÷ 60 + s ÷ 3600; grads × π ÷ 200
LISP arithmetic, conversions and geometry lisp/builtins.js64-bit- CadCraft
-
Unit factors for CVUNIT
The factor of each unit to its base unit: meter, radian, kilogram or square meter.
inch 0.0254; foot 0.3048; yard 0.9144; mile 1609.344; pound 0.45359237; sq inch 0.00064516; sq foot 0.09290304; acre 4046.8564224
LISP arithmetic, conversions and geometry lisp/builtins.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.