{"name":"TechTools Geometry Lab API","version":"1.0","updated":"2026-10-17","engine_version":"1.0.0","summary":"15 plane shapes and 22 solids (37 in all), every formula of each, an inverse solver and a calculator, as JSON. Give a shape's parameters and get every quantity (area, perimeter, volume, surface, diagonals, angles, radii) with its formula, the formula with the numbers substituted, and the value; or give a target quantity and get the parameter that produces it. Same engine as the browser tool at https://techtools.cz/tools/geometry-lab/ (one math contract, a JS and a Ruby implementation kept equal by a parity test).","base_url":"https://techtools.cz/geometry-lab-api","tool_url":"https://techtools.cz/tools/geometry-lab/","auth":"None. Public, read-only, no data stored.","rate_limits":"None beyond the input caps: an expression is at most 500 characters and a request body at most 64 KB (nginx). Successful GET answers are cacheable for 5 minutes; please cache rather than repeat identical calls.","conventions":{"input":"GET takes a query string; POST takes a JSON body (Content-Type: application/json) or form fields. Both give the same answer. Numbers may be JSON numbers or strings, and a decimal comma (\"2,5\") is accepted. Unknown keys are ignored, so a caller can send its whole state.","lang":"lang=cs returns shape, parameter and quantity names, explanations and notes in Czech; anything else English. Every error carries both message (English) and message_cs (Czech).","status":"200 with ok: true. 422 with ok: false and errors when the engine refuses the input. 404 for an unknown id on /shapes/:id. 400 for a malformed JSON body.","caching":"Successful GET answers carry Cache-Control: public, max-age=300. POST answers are not cached.","numbers":"value is the full double. rounded is value rounded half away from zero to `decimals` places (default 4). substituted prints every known number rounded to 4 places (integers without a decimal point, e-notation from 1e15).","key_order":"The key order of every document is part of the contract: the JS and Ruby engines emit the same order."},"endpoints":[{"method":"GET","path":"/shapes","params":{"lang":"en (default) or cs"},"returns":"every shape with its parameters (default, slider min/max/step, limits, open ends) and the keys of the quantities it computes, plus the groups","curl":"curl 'https://techtools.cz/geometry-lab-api/shapes?lang=en'","example_response":{"ok":true,"engine_version":"1.0.0","count":37,"groups":[{"id":"plane_round","dim":2,"name":"Circles and curves"}],"shapes":[{"id":"circle","dim":2,"group":"plane_round","name":"Circle","color":"#1e9bff","url":"https://techtools.cz/tools/geometry-lab/circle/","params":[{"key":"r","symbol":"r","name":"Radius","kind":"length","default":3,"min":0.1,"max":10,"step":0.1}],"quantities":[{"key":"d","symbol":"d","name":"Diameter","kind":"length","main":false},{"key":"C","symbol":"C","name":"Circumference","kind":"length","main":true},{"key":"A","symbol":"A","name":"Area","kind":"area","main":true}]}],"note":"trimmed to the first group and the first shape"}},{"method":"GET","path":"/shapes/:id","params":{"id":"a shape id (see shapes below)","lang":"en (default) or cs"},"returns":"one shape in full: explain, params, constraints (expression, code and both messages) and every quantity with expr, tex and note; 404 with code unknown_shape for an unknown id","curl":"curl 'https://techtools.cz/geometry-lab-api/shapes/circle'","example_response":{"id":"circle","dim":2,"group":"plane_round","name":"Circle","color":"#1e9bff","url":"https://techtools.cz/tools/geometry-lab/circle/","explain":"Every point of the edge is the same distance r from the centre. π is the ratio of any circle's circumference to its diameter, so C = πd = 2πr. Cut the disc into thin wedges and lay them alternately point up and point down: they form an almost-rectangle of height r and width πr (half the circumference), so A = πr².","params":[{"key":"r","symbol":"r","name":"Radius","kind":"length","default":3,"min":0.1,"max":10,"step":0.1}],"constraints":[],"quantities":[{"key":"d","symbol":"d","name":"Diameter","kind":"length","expr":"2 * r","tex":"d = 2r","viz":"diameter","main":false,"aux":false},{"key":"C","symbol":"C","name":"Circumference","kind":"length","expr":"2 * pi * r","tex":"C = 2\\pi r = \\pi d","viz":"perimeter","main":true,"aux":false},{"key":"A","symbol":"A","name":"Area","kind":"area","expr":"pi * r^2","tex":"A = \\pi r^2","viz":"area","main":true,"aux":false}]}},{"method":"GET","path":"/compute","params":{"shape":"required, a shape id","\u003cparameter key\u003e":"the shape's parameters by key, e.g. r, h, a, alpha, n (see /shapes); a missing one takes its default","unit":"mm | cm | dm | m | km | in | ft | yd (default cm)","decimals":"0..10, places in `rounded` (default 4)","lang":"en (default) or cs"},"returns":"every quantity of the shape (see compute_response); 422 on a refusal","curl":"curl 'https://techtools.cz/geometry-lab-api/compute?shape=circle\u0026r=3'","example_response":{"ok":true,"engine_version":"1.0.0","shape":{"id":"circle","dim":2,"group":"plane_round","name":"Circle"},"lang":"en","unit":"cm","decimals":4,"params":[{"key":"r","symbol":"r","name":"Radius","kind":"length","value":3.0,"unit":"cm"}],"quantities":[{"key":"d","symbol":"d","name":"Diameter","kind":"length","value":6.0,"rounded":6.0,"unit":"cm","expr":"2 * r","substituted":"2 * 3","tex":"d = 2r","main":false,"aux":false},{"key":"C","symbol":"C","name":"Circumference","kind":"length","value":18.84955592153876,"rounded":18.8496,"unit":"cm","expr":"2 * pi * r","substituted":"2 * pi * 3","tex":"C = 2\\pi r = \\pi d","main":true,"aux":false},{"key":"A","symbol":"A","name":"Area","kind":"area","value":28.274333882308138,"rounded":28.2743,"unit":"cm²","expr":"pi * r^2","substituted":"pi * 3^2","tex":"A = \\pi r^2","main":true,"aux":false}]}},{"method":"POST","path":"/compute","content_type":"application/json","body":{"shape":"cylinder","r":2,"h":5,"unit":"m","decimals":2},"returns":"the same document as GET /compute","curl":"curl -X POST -H 'Content-Type: application/json' -d '{\"shape\":\"cylinder\",\"r\":2,\"h\":5,\"unit\":\"m\",\"decimals\":2}' https://techtools.cz/geometry-lab-api/compute","example_response":{"ok":true,"engine_version":"1.0.0","shape":{"id":"cylinder","dim":3,"group":"solid_round","name":"Cylinder"},"lang":"en","unit":"m","decimals":2,"params":[{"key":"r","symbol":"r","name":"Radius","kind":"length","value":2.0,"unit":"m"},{"key":"h","symbol":"h","name":"Height","kind":"length","value":5.0,"unit":"m"}],"quantities":[{"key":"S","symbol":"S","name":"Surface area","kind":"area","value":87.96459430051421,"rounded":87.96,"unit":"m²","expr":"2 * S_base + S_lat","substituted":"2 * 12.5664 + 62.8319","tex":"S = 2\\pi r (r + h)","main":true,"aux":false},{"key":"V","symbol":"V","name":"Volume","kind":"volume","value":62.83185307179586,"rounded":62.83,"unit":"m³","expr":"S_base * h","substituted":"12.5664 * 5","tex":"V = \\pi r^2 h","main":true,"aux":false,"litres":62831.853071795864}],"note":"trimmed to the main quantities"}},{"method":"GET","path":"/solve","params":{"shape":"required, a shape id","given":"required, the key of the quantity whose value you know, e.g. A","value":"required, its target value (in unit, unit², unit³ or degrees)","unknown":"the key of the parameter to find (default: the shape's first parameter); not a count","\u003cother parameter keys\u003e":"held fixed at the sent value or the default","unit":"as /compute","decimals":"as /compute","lang":"as /compute"},"returns":"the full compute document at the found parameter plus solve: { given, value, unknown, found, rounded, unit, iterations, residual }; 422 with no_solution when no value works","curl":"curl 'https://techtools.cz/geometry-lab-api/solve?shape=circle\u0026given=A\u0026value=200\u0026unknown=r'","example_response":{"ok":true,"engine_version":"1.0.0","shape":{"id":"circle","dim":2,"group":"plane_round","name":"Circle"},"lang":"en","unit":"cm","decimals":4,"params":[{"key":"r","symbol":"r","name":"Radius","kind":"length","value":7.978845608028651,"unit":"cm"}],"quantities":[{"key":"C","symbol":"C","name":"Circumference","kind":"length","value":50.132565492619996,"rounded":50.1326,"unit":"cm","expr":"2 * pi * r","substituted":"2 * pi * 7.9788","tex":"C = 2\\pi r = \\pi d","main":true,"aux":false},{"key":"A","symbol":"A","name":"Area","kind":"area","value":199.9999999999999,"rounded":200.0,"unit":"cm²","expr":"pi * r^2","substituted":"pi * 7.9788^2","tex":"A = \\pi r^2","main":true,"aux":false}],"solve":{"given":"A","value":200.0,"unknown":"r","found":7.978845608028651,"rounded":7.9788,"unit":"cm","iterations":46,"residual":-1.1368683772161603e-13},"note":"trimmed to the main quantities"}},{"method":"POST","path":"/solve","content_type":"application/json","body":{"shape":"cylinder","given":"V","value":1000,"unknown":"h","r":5},"returns":"the same document as GET /solve","curl":"curl -X POST -H 'Content-Type: application/json' -d '{\"shape\":\"cylinder\",\"given\":\"V\",\"value\":1000,\"unknown\":\"h\",\"r\":5}' https://techtools.cz/geometry-lab-api/solve","example_response":{"solve":{"given":"V","value":1000.0,"unknown":"h","found":12.732395447351623,"rounded":12.7324,"unit":"cm","iterations":46,"residual":-3.410605131648481e-13},"note":"trimmed to the solve block"}},{"method":"GET","path":"/calc","params":{"expr":"required, the expression (see expression_language)","angle":"rad (default) or deg: the unit of trig arguments and inverse-trig results","decimals":"0..10, places in `rounded` (default 4)","vars[\u003cname\u003e]":"a variable, e.g. vars[r]=3; up to 50"},"returns":"{ ok, engine_version, expr, normalized, angle, value, rounded, decimals }; normalized is the expression as the parser read it, with explicit operators and brackets; 422 with code and pos on an error","curl":"curl -G 'https://techtools.cz/geometry-lab-api/calc' --data-urlencode 'expr=2pi * r^2' --data-urlencode 'vars[r]=3'","example_response":{"ok":true,"engine_version":"1.0.0","expr":"2pi * r^2","normalized":"2 * pi * r^2","angle":"rad","value":56.548667764616276,"rounded":56.5487,"decimals":4}},{"method":"POST","path":"/calc","content_type":"application/json","body":{"expr":"sin(30) + x^2","angle":"deg","vars":{"x":2}},"returns":"the same document as GET /calc","curl":"curl -X POST -H 'Content-Type: application/json' -d '{\"expr\":\"sin(30) + x^2\",\"angle\":\"deg\",\"vars\":{\"x\":2}}' https://techtools.cz/geometry-lab-api/calc","example_response":{"ok":true,"engine_version":"1.0.0","expr":"sin(30) + x^2","normalized":"sin(30) + x^2","angle":"deg","value":4.5,"rounded":4.5,"decimals":4}},{"method":"GET","path":"/docs","returns":"this document","curl":"curl 'https://techtools.cz/geometry-lab-api/docs'"}],"compute_response":{"top_level":["ok","engine_version","shape","lang","unit","decimals","params","quantities"],"shape":"{ id, dim, group, name }","params":"[{ key, symbol, name, kind, value, unit }] in catalog order; value is what was used (a default when not sent)","quantities":"[{ key, symbol, name, kind, value, rounded, unit, expr, substituted, tex, main, aux, litres?, note? }] in catalog order. main marks the headline results, aux a helper value. litres only on volumes, note only on approximations.","solve":"/solve adds solve: { given, value, unknown, found, rounded, unit, iterations, residual }; residual is the computed quantity minus the target."},"expression_language":{"summary":"The small language the tool's formulas are written in (every quantity's expr). /calc evaluates it; the same parser reads the catalog, so a formula from /shapes/:id can be pasted into /calc with vars.","operators":[{"op":"+ -","meaning":"addition and subtraction","precedence":1,"associativity":"left"},{"op":"* /","meaning":"multiplication and division (dividing by 0 is an error)","precedence":2,"associativity":"left"},{"op":"implicit","meaning":"a name, ( or √ right after an operand multiplies: 2pi, 3r, 2(a + b), (1 + 2)(3 + 4), 2√9","precedence":2,"associativity":"left"},{"op":"unary - +","meaning":"sign: -2^2 is -(2^2) = -4","precedence":3},{"op":"^","meaning":"power, right-associative: 2^3^2 = 2^9 = 512; the exponent may carry a sign: 2^-1 = 0.5","precedence":4,"associativity":"right"},{"op":"!","meaning":"factorial of a whole number from 0 to 170, binds tightest: 3!^2 = 36","precedence":5},{"op":"( )","meaning":"grouping; name(a, b) calls a function"}],"numbers":"123, 1.5, .5, 1., 1e3, 2.5E-4. Inside an expression the decimal separator is a point; a comma separates function arguments.","unicode_aliases":[{"char":"π","means":"pi"},{"char":"τ","means":"tau"},{"char":"φ","means":"phi"},{"char":"ϕ","means":"phi"},{"char":"×","means":"*"},{"char":"·","means":"*"},{"char":"⋅","means":"*"},{"char":"∙","means":"*"},{"char":"÷","means":"/"},{"char":"−","means":"-"},{"char":"–","means":"-"},{"char":"²","means":"^2"},{"char":"³","means":"^3"},{"char":"√","means":"sqrt of the next number, name or bracket: √16, √(a + b)"}],"constants":{"pi":3.141592653589793,"e":2.718281828459045,"tau":6.283185307179586,"phi":1.618033988749895},"functions":[{"name":"sqrt","arity":"1","meaning":"square root"},{"name":"cbrt","arity":"1","meaning":"cube root, real for negatives: cbrt(-27) = -3"},{"name":"root","arity":"2","meaning":"root(x, n) is the n-th root; odd roots of negatives are real: root(-8, 3) = -2"},{"name":"abs","arity":"1","meaning":"absolute value"},{"name":"sign","arity":"1","meaning":"-1, 0 or 1"},{"name":"sin","arity":"1","meaning":"sine, argument in the angle mode"},{"name":"cos","arity":"1","meaning":"cosine, argument in the angle mode"},{"name":"tan","arity":"1","meaning":"tangent, argument in the angle mode"},{"name":"cot","arity":"1","meaning":"cotangent (1 / tan), argument in the angle mode"},{"name":"asin","arity":"1","meaning":"inverse sine, result in the angle mode"},{"name":"acos","arity":"1","meaning":"inverse cosine, result in the angle mode"},{"name":"atan","arity":"1","meaning":"inverse tangent, result in the angle mode"},{"name":"atan2","arity":"2","meaning":"atan2(y, x) is the angle of the point (x, y), result in the angle mode"},{"name":"sinh","arity":"1","meaning":"hyperbolic sine"},{"name":"cosh","arity":"1","meaning":"hyperbolic cosine"},{"name":"tanh","arity":"1","meaning":"hyperbolic tangent"},{"name":"exp","arity":"1","meaning":"e to the power of x"},{"name":"ln","arity":"1","meaning":"natural logarithm"},{"name":"log","arity":"1-2","meaning":"log(x) is the base-10 logarithm, log(x, b) the base-b logarithm"},{"name":"log2","arity":"1","meaning":"base-2 logarithm"},{"name":"log10","arity":"1","meaning":"base-10 logarithm"},{"name":"pow","arity":"2","meaning":"pow(x, y) is x^y"},{"name":"hypot","arity":"1+","meaning":"hypot(a, b, ...) is sqrt(a^2 + b^2 + ...)"},{"name":"min","arity":"1+","meaning":"the smallest argument"},{"name":"max","arity":"1+","meaning":"the largest argument"},{"name":"floor","arity":"1","meaning":"round down"},{"name":"ceil","arity":"1","meaning":"round up"},{"name":"round","arity":"1","meaning":"round half away from zero: round(2.5) = 3, round(-2.5) = -3"},{"name":"mod","arity":"2","meaning":"mod(a, b) is a - b * floor(a / b), so the sign follows b: mod(-7, 3) = 2"},{"name":"fact","arity":"1","meaning":"factorial, the same as n!"},{"name":"rad","arity":"1","meaning":"degrees to radians"},{"name":"deg","arity":"1","meaning":"radians to degrees"}],"angle_modes":{"rad":"default: trig functions take radians and inverse trig functions return radians","deg":"trig functions take degrees and inverse trig functions return degrees; rad() and deg() convert in either mode"},"variables":"vars maps names to numbers (or numeric strings). A name is 1 to 32 letters, digits or _ starting with a letter or _. A variable shadows a constant of the same name. At most 50.","whitespace":"spaces, tabs and line breaks between tokens are ignored","limits":{"max_length":500,"max_depth":64,"max_variables":50}},"units":{"length_units":["mm","cm","dm","m","km","in","ft","yd"],"default":"cm","by_kind":{"length":"\u003cunit\u003e","area":"\u003cunit\u003e²","volume":"\u003cunit\u003e³","angle":"°","ratio":"","count":""},"note":"unit picks the length unit of every parameter and result: areas come out in unit², volumes in unit³. Angles (parameters and results) are always degrees; ratios and counts have no unit.","litres":"Every volume quantity also carries litres = value * litres_per_cubic_unit[unit] (1 dm³ = 1 l).","litres_per_cubic_unit":{"mm":0.000001,"cm":0.001,"dm":1.0,"m":1000.0,"km":1000000000000.0,"in":0.016387064,"ft":28.316846592,"yd":764.554857984},"length_limits":"A length parameter must be greater than 0 and at most 1000000, in the chosen unit. Angle and count parameters have their own limits, listed per parameter by /shapes."},"solver":"Holds every other parameter at its sent value (or its default) and searches the parameter `unknown` (default: the shape's first parameter) for the value at which quantity `given` equals `value`. It scans a grid for the first sign change of (quantity - value): for a length 241 points spaced logarithmically from 1e-6 to 1e6 (10^(-6 + 12k/240), k = 0..240); for an angle 719 evenly spaced points strictly inside its limits, plus the upper limit when that is allowed. Points where the shape is impossible or a formula has no value are skipped. At the first sign change it bisects (at most 200 halvings, until the bracket is at most 1e-15 * max(1, |x|) wide) and reports the midpoint, so it returns the FIRST root from small to large: for a quantity that rises and then falls (a parallelogram's area over its angle) the smaller angle wins. Count parameters such as n are not searched (param_not_solvable).","approximations":[{"shape":"ellipse","quantity":"C","expr":"pi * (a + b) * (1 + 3 * h_r / (10 + sqrt(4 - 3 * h_r)))","note":"Ramanujan's approximation (exact for a circle).","method":"Ramanujan's second approximation: C = pi (a + b) (1 + 3h / (10 + sqrt(4 - 3h))) with h = (a - b)^2 / (a + b)^2. Exact for a circle; the tool's tests check it against a numeric integral of the arc length to 1e-9 for a = 5, b = 3. The error grows only for very flat ellipses."},{"shape":"ellipsoid","quantity":"S","expr":"4 * pi * (((a * b)^1.6075 + (a * c)^1.6075 + (b * c)^1.6075) / 3)^(1 / 1.6075)","note":"Knud Thomsen's approximation, error below 1.07 %.","method":"Knud Thomsen's formula with p = 1.6075: S = 4 pi (((ab)^p + (ac)^p + (bc)^p) / 3)^(1/p). Relative error below 1.07 %, exact for a sphere."}],"errors":{"status":"422 (404 for /shapes/:id)","shape":{"ok":false,"engine_version":"1.0.0","errors":[{"param":"c","code":"triangle_inequality","message":"Side c must be shorter than a + b (triangle inequality).","message_cs":"Strana c musí být kratší než a + b (trojúhelníková nerovnost)."}]},"note":"/calc errors also carry pos, the 0-based character index of the problem (null when the problem is the value, not a place in the text). A refusal may list several errors at once.","codes":[{"code":"empty","endpoints":["/calc"],"param":"expr","when":"expr is missing or only whitespace","message":"Type an expression."},{"code":"too_long","endpoints":["/calc"],"param":"expr","when":"expr is longer than 500 characters","message":"The expression is longer than 500 characters."},{"code":"too_deep","endpoints":["/calc"],"param":"expr","when":"brackets, signs, powers or roots are nested deeper than 64 parser levels","message":"The expression is nested too deeply."},{"code":"unexpected_char","endpoints":["/calc"],"param":"expr","when":"a character outside the language, such as $ or #","message":"Unexpected character \"{0}\"."},{"code":"unexpected_token","endpoints":["/calc"],"param":"expr","when":"a number, name or operator where none can stand: 2 3, 2 + ), max(1,,2)","message":"Unexpected \"{0}\"."},{"code":"unexpected_end","endpoints":["/calc"],"param":"expr","when":"the expression stops in the middle: 2 +","message":"The expression ends too early."},{"code":"missing_paren","endpoints":["/calc"],"param":"expr","when":"a bracket is opened and never closed: (2 + 3","message":"A closing bracket \")\" is missing."},{"code":"unknown_identifier","endpoints":["/calc"],"param":"expr","when":"a name that is neither a variable, a constant nor a function: foo + 1","message":"Unknown name \"{0}\"."},{"code":"unknown_function","endpoints":["/calc"],"param":"expr","when":"a call of a name that is no function: foo(1)","message":"Unknown function \"{0}\"."},{"code":"not_a_function","endpoints":["/calc"],"param":"expr","when":"a call of a constant or a variable: pi(2)","message":"\"{0}\" is not a function."},{"code":"function_needs_args","endpoints":["/calc"],"param":"expr","when":"a function name without brackets: sin","message":"{0} is a function: write {0}(...)."},{"code":"arity","endpoints":["/calc"],"param":"expr","when":"a function called with the wrong number of arguments: sin(1, 2)","message":"{0}() takes {1} argument(s)."},{"code":"division_by_zero","endpoints":["/calc"],"param":"expr","when":"a division or mod by zero: 1 / 0, mod(5, 0)","message":"Division by zero."},{"code":"not_real","endpoints":["/calc"],"param":"expr","when":"the result is not a real number: sqrt(-1), acos(2), ln(-1), (-8)^(1/3)","message":"The result is not a real number."},{"code":"not_finite","endpoints":["/calc"],"param":"expr","when":"the result overflows or is infinite: 10^400, log(0)","message":"The result is too large (or infinite)."},{"code":"factorial_domain","endpoints":["/calc"],"param":"expr","when":"n! or fact(n) with n not a whole number from 0 to 170","message":"n! needs a whole number from 0 to 170."},{"code":"bad_variable","endpoints":["/calc"],"param":"vars","when":"a variable name is not 1 to 32 letters, digits or _ starting with a letter or _, or its value is not a number","message":"Variable \"{0}\" is not a valid name or number."},{"code":"too_many_variables","endpoints":["/calc"],"param":"vars","when":"more than 50 variables","message":"At most 50 variables."},{"code":"bad_angle_mode","endpoints":["/calc"],"param":"angle","when":"angle is neither rad nor deg","message":"angle must be \"rad\" or \"deg\"."},{"code":"unknown_shape","endpoints":["/compute","/solve","/shapes/:id"],"param":"shape","when":"shape is not one of the ids listed under shapes (a 404 on /shapes/:id)","message":"Unknown shape \"{0}\"."},{"code":"unknown_unit","endpoints":["/compute","/solve"],"param":"unit","when":"unit is not one of the length units listed under units","message":"Unknown unit \"{0}\". Use one of mm, cm, dm, m, km, in, ft, yd."},{"code":"bad_decimals","endpoints":["/compute","/solve","/calc"],"param":"decimals","when":"decimals is not a whole number from 0 to 10","message":"decimals must be a whole number from 0 to 10."},{"code":"not_a_number","endpoints":["/compute","/solve"],"param":"a parameter key, or value on /solve","when":"the value is not a number (\"abc\", true, an array). A decimal comma (\"2,5\") is accepted","message":"{0} must be a number."},{"code":"out_of_range","endpoints":["/compute","/solve"],"param":"a parameter key","when":"a length is not greater than 0 and at most 1000000, or an angle or count is outside its limits (see /shapes)","message":"{0} must be {1}."},{"code":"not_integer","endpoints":["/compute","/solve"],"param":"a count parameter such as n","when":"a count is not a whole number","message":"{0} must be a whole number."},{"code":"not_computable","endpoints":["/compute","/solve"],"param":"a quantity key","when":"the parameters pass every check but a formula still has no real, finite value, for example a triangle so flat that its area rounds to 0","message":"{0} cannot be computed for these values."},{"code":"unknown_quantity","endpoints":["/solve"],"param":"given","when":"given is not a quantity key of this shape","message":"Unknown quantity \"{0}\" for this shape."},{"code":"unknown_param","endpoints":["/solve"],"param":"unknown","when":"unknown is not a parameter key of this shape","message":"Unknown parameter \"{0}\" for this shape."},{"code":"param_not_solvable","endpoints":["/solve"],"param":"unknown","when":"unknown is a count (a whole number such as n), which the solver does not search","message":"{0} is a whole number and cannot be solved for."},{"code":"no_solution","endpoints":["/solve"],"param":"value","when":"no value of the unknown inside its limits reaches the target: the scan found no sign change","message":"No value of {0} gives {1} = {2}."},{"code":"inner_not_smaller","endpoints":["/compute","/solve"],"param":"r","when":"the shape cannot exist: The inner radius r must be smaller than the outer radius R.","shapes":["annulus","tube","spherical_shell"]},{"code":"triangle_inequality","endpoints":["/compute","/solve"],"param":"a | b | c","when":"the shape cannot exist: Side a must be shorter than b + c (triangle inequality).","shapes":["triangle","triangular_prism"]},{"code":"legs_too_short","endpoints":["/compute","/solve"],"param":"b","when":"the shape cannot exist: The two legs together must be longer than the base (2b \u003e a).","shapes":["isosceles_triangle"]},{"code":"cap_too_tall","endpoints":["/compute","/solve"],"param":"h","when":"the shape cannot exist: The cap cannot be taller than the sphere (h ≤ 2r).","shapes":["spherical_cap"]},{"code":"tube_too_thick","endpoints":["/compute","/solve"],"param":"r","when":"the shape cannot exist: The tube radius r must be smaller than R, or the donut has no hole.","shapes":["torus"]}]},"shapes":{"count":37,"groups":[{"group":"plane_round","dim":2,"name":"Circles and curves","name_cs":"Kruhy a křivky","ids":["circle","ellipse","annulus","sector","segment"]},{"group":"plane_triangle","dim":2,"name":"Triangles","name_cs":"Trojúhelníky","ids":["triangle","right_triangle","equilateral_triangle","isosceles_triangle"]},{"group":"plane_polygon","dim":2,"name":"Quadrilaterals and polygons","name_cs":"Čtyřúhelníky a mnohoúhelníky","ids":["square","rectangle","parallelogram","rhombus","trapezoid","regular_polygon"]},{"group":"solid_prism","dim":3,"name":"Boxes and prisms","name_cs":"Krychle, kvádry a hranoly","ids":["cube","cuboid","triangular_prism","regular_prism"]},{"group":"solid_pyramid","dim":3,"name":"Pyramids","name_cs":"Jehlany","ids":["square_pyramid","regular_pyramid","square_frustum"]},{"group":"solid_round","dim":3,"name":"Round solids","name_cs":"Oblá tělesa","ids":["sphere","hemisphere","cylinder","cone","frustum","capsule","spherical_cap","torus","ellipsoid","tube","spherical_shell"]},{"group":"solid_platonic","dim":3,"name":"Platonic solids","name_cs":"Platónská tělesa","ids":["tetrahedron","octahedron","dodecahedron","icosahedron"]}]},"links":{"tool":"https://techtools.cz/tools/geometry-lab/","shapes":"https://techtools.cz/geometry-lab-api/shapes","llms":"https://techtools.cz/llms.txt"}}