{"id":18008015,"url":"https://github.com/luizzak/geometria","last_synced_at":"2025-03-26T12:32:01.405Z","repository":{"id":46969498,"uuid":"397432856","full_name":"LuizZak/Geometria","owner":"LuizZak","description":"Swift geometry-related types and algorithms","archived":false,"fork":false,"pushed_at":"2024-12-11T20:14:03.000Z","size":100264,"stargazers_count":10,"open_issues_count":1,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-21T19:04:00.308Z","etag":null,"topics":["geometric-algorithms","geometry","geometry-library","polygon-boolean","swift"],"latest_commit_sha":null,"homepage":"https://LuizZak.github.io/Geometria","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LuizZak.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-08-18T01:06:54.000Z","updated_at":"2024-12-11T20:14:07.000Z","dependencies_parsed_at":"2024-10-30T01:33:08.462Z","dependency_job_id":null,"html_url":"https://github.com/LuizZak/Geometria","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuizZak%2FGeometria","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuizZak%2FGeometria/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuizZak%2FGeometria/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuizZak%2FGeometria/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LuizZak","download_url":"https://codeload.github.com/LuizZak/Geometria/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245654283,"owners_count":20650837,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["geometric-algorithms","geometry","geometry-library","polygon-boolean","swift"],"created_at":"2024-10-30T01:16:35.070Z","updated_at":"2025-03-26T12:32:00.734Z","avatar_url":"https://github.com/LuizZak.png","language":"Swift","readme":"# Geometria\n\n[![Swift](https://github.com/LuizZak/Geometria/actions/workflows/swift.yml/badge.svg)](https://github.com/LuizZak/Geometria/actions/workflows/swift.yml)\n\nA collection of definitions and algorithms for working with 2- and 3- dimensional geometries in Swift.\n\n(README.md is still in construction.)\n\n### Type definitions\n\n\u003ctable\u003e\n    \u003csvg display=\"hidden\"\u003e\n        \u003cdefs\u003e\n            \u003cg id=\"dot\"\u003e\n                \u003ccircle r=\"4\" stroke=\"none\" fill=\"#00f\"/\u003e\n            \u003c/g\u003e\n            \u003cmarker id=\"arrow-unit\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto-start-reverse\"\u003e\n                \u003cpath d=\"M 0 0 L 10 5 L 0 10 z\" fill=\"#f00\"/\u003e\n            \u003c/marker\u003e\n            \u003cmarker id=\"arrow-length\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto-start-reverse\"\u003e\n                \u003cpath d=\"M 0 0 L 10 5 L 0 10 z\" fill=\"#00f\"/\u003e\n            \u003c/marker\u003e\n            \u003cmarker id=\"circle\" markerWidth=\"8\" markerHeight=\"8\" refX=\"4\" refY=\"4\" markerUnits=\"userSpaceOnUse\"\u003e\n                \u003cuse href=\"#dot\" x=\"4\" y=\"4\"/\u003e\n            \u003c/marker\u003e\n        \u003c/defs\u003e\n    \u003c/svg\u003e\n    \u003ctr\u003e\n        \u003cth\u003eN-dimensional\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003cth\u003ePrimitive\u003c/th\u003e\n        \u003cth\u003eIllustration\u003c/th\u003e\n        \u003cth\u003eGeometria type\u003c/th\u003e\n        \u003cth\u003eRemarks\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003ca href=\"https://en.wikipedia.org/wiki/Minimum_bounding_box#Axis-aligned_minimum_bounding_box\"\u003eAxis-aligned bounding-box\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003csvg width=\"100\" height=\"100\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n                \u003crect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"white\"/\u003e\n                \u003crect x=\"12\" y=\"25\" width=\"75\" height=\"50\" stroke=\"black\" fill=\"transparent\" stroke-width=\"2\"/\u003e\n                \u003cuse href=\"#dot\" x=\"12\" y=\"25\"/\u003e\n                \u003cuse href=\"#dot\" x=\"87\" y=\"75\"/\u003e\n            \u003c/svg\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003ca href=\"Sources/Geometria/Generalized/AABB.swift\"\u003eAABB.swift\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Defined as two point vectors describing the minimal and maximal coordinates contained within the AABB.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003ca href=\"https://en.wikipedia.org/wiki/Line_(geometry)#Ray\"\u003eRay (unit vector direction)\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003csvg width=\"100\" height=\"100\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n                \u003crect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"white\"/\u003e\n                \u003cg transform=\"translate(20, 70) rotate(-35)\" stroke-width=\"2\"\u003e\n                    \u003cline x2=\"100\" y2=\"0\" stroke=\"black\" stroke-linecap=\"round\"/\u003e\n                    \u003cline x2=\"15\" y2=\"0\" marker-end=\"url(#arrow-unit)\"/\u003e\n                    \u003cuse href=\"#dot\"/\u003e\n                \u003c/g\u003e\n            \u003c/svg\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003ca href=\"Sources/Geometria/Generalized/DirectionalRay.swift\"\u003eDirectionalRay.swift\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Defined as a starting point vector and a \u003ca href=\"https://en.wikipedia.org/wiki/Unit_vector\"\u003eunit vector\u003c/a\u003e describing the direction of the ray.\n            \u003c/br\u003e\n            Conceptually it extends to infinity in only one of its two ends (pointed to by its direction unit vector).\n        \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003ca href=\"https://en.wikipedia.org/wiki/Ellipsoid\"\u003eN-dimensional Ellipsoid\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003csvg width=\"100\" height=\"100\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n                \u003crect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"white\"/\u003e\n                \u003cg transform=\"translate(-6, 17) scale(0.4, 0.3)\" stroke-width=\"3\"\u003e\n                    \u003cg\u003e\n                        \u003cpath fill=\"none\" stroke=\"#231F20\" stroke-miterlimit=\"10\" d=\"M228,112.5c0,16.463-39.176,29.808-87.5,29.808   c-48.325,0-87.5-13.345-87.5-29.808\"/\u003e\n                        \u003cg\u003e\n                            \u003cg\u003e\n                                \u003cpath fill=\"none\" stroke=\"#231F20\" stroke-miterlimit=\"10\" d=\"M53,112.5c0-0.999,0.144-1.985,0.426-2.959\"/\u003e\n                                \u003cpath fill=\"none\" stroke=\"#231F20\" stroke-miterlimit=\"10\" stroke-dasharray=\"6.1156,6.1156\" d=\"     M56.397,104.247C66.904,91.799,100.58,82.692,140.5,82.692c42.541,0,77.992,10.342,85.868,24.049\"/\u003e\n                                \u003cpath fill=\"none\" stroke=\"#231F20\" stroke-miterlimit=\"10\" d=\"M227.574,109.541     c0.281,0.974,0.426,1.96,0.426,2.959\"/\u003e\n                            \u003c/g\u003e\n                        \u003c/g\u003e\n                    \u003c/g\u003e\n                    \u003cg fill=\"none\" stroke=\"black\"\u003e\n                        \u003ccircle cx=\"140\" cy=\"111\" r=\"88\"/\u003e\n                        \u003cline x1=\"140\" y1=\"111\" x2=\"220\" y2=\"111\" stroke-dasharray=\"6.1156,6.1156\" marker-end=\"url(#arrow-length)\"/\u003e\n                        \u003cline x1=\"140\" y1=\"111\" x2=\"140\" y2=\"35\" stroke-dasharray=\"6.1156,6.1156\" marker-end=\"url(#arrow-length)\"/\u003e\n                        \u003cline x1=\"140\" y1=\"111\" x2=\"110\" y2=\"130\" stroke-dasharray=\"6.1156,6.1156\" marker-end=\"url(#arrow-length)\"/\u003e\n                        \u003ccircle cx=\"200\" cy=\"111\" r=\"10\" stroke=\"none\" fill=\"#00f\" transform=\"scale(0.7, 1)\"/\u003e\n                    \u003c/g\u003e\n                \u003c/g\u003e\n            \u003c/svg\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003ca href=\"Sources/Geometria/Generalized/Ellipsoid.swift\"\u003eEllipsoid.swift\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Defined as a center point vector and an axis vector.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003ca href=\"https://en.wikipedia.org/wiki/Hyperplane\"\u003eHyperplane\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003csvg width=\"100\" height=\"100\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n                \u003cg\u003e\n                    \u003crect fill=\"white\" height=\"100%\" width=\"100%\" x=\"0\" y=\"0\"/\u003e\n                    \u003cg stroke-linejoin=\"round\" stroke-width=\"0.75\"\u003e\n                    \u003cg stroke=\"#c0c0c0\"\u003e\n                        \u003cpath d=\"m-10.12,-13.11l0,128.38\"/\u003e\n                        \u003cpath d=\"m2.71,-13.11l0,128.38\"/\u003e\n                        \u003cpath d=\"m15.55,-13.11l0,128.38\"/\u003e\n                        \u003cpath d=\"m28.39,-13.11l0,128.38\"/\u003e\n                        \u003cpath d=\"m41.23,-13.11l0,128.38\"/\u003e\n                        \u003cpath d=\"m54.07,-13.11l0,128.38\"/\u003e\n                        \u003cpath d=\"m66.91,-13.11l0,128.38\"/\u003e\n                        \u003cpath d=\"m79.74,-13.11l0,128.38\"/\u003e\n                        \u003cpath d=\"m92.58,-13.11l0,128.38\"/\u003e\n                        \u003cpath d=\"m105.42,-13.11l0,128.38\"/\u003e\n                        \u003cpath d=\"m118.26,-13.11l0,128.38\"/\u003e\n                        \u003cpath d=\"m-16.54,-6.69l128.38,0\"/\u003e\n                        \u003cpath d=\"m-16.54,6.14l128.38,0\"/\u003e\n                        \u003cpath d=\"m-16.54,18.98l128.38,0\"/\u003e\n                        \u003cpath d=\"m-3.7,31.82l128.38,0\"/\u003e\n                        \u003cpath d=\"m-3.7,44.66l128.38,0\"/\u003e\n                        \u003cpath d=\"m-3.7,57.5l128.38,0\"/\u003e\n                        \u003cpath d=\"m-3.7,70.34l128.38,0\"/\u003e\n                        \u003cpath d=\"m-3.7,83.17l128.38,0\"/\u003e\n                        \u003cpath d=\"m-3.7,96.01l128.38,0\"/\u003e\n                    \u003c/g\u003e\n                    \u003c/g\u003e\n                \u003c/g\u003e\n                \u003cg\u003e\n                    \u003cline fill=\"none\" stroke=\"black\" stroke-linecap=\"round\" x1=\"-5.22\" x2=\"115.73\" y1=\"83.16\" y2=\"83.16\"/\u003e\n                    \u003cline fill=\"none\" stroke=\"black\" stroke-linecap=\"round\" x1=\"15.55\" x2=\"15.55\" y1=\"-6.98\" y2=\"105.91\"/\u003e\n                \u003c/g\u003e\n                \u003cg stroke-width=\"2\"\u003e\n                    \u003cline stroke=\"black\" stroke-linecap=\"round\" x1=\"-0.95\" x2=\"102.34\" y1=\"-0.95\" y2=\"102.38\"/\u003e\n                    \u003cpath d=\"m-2.5,-2.58l106.26,106.81l-106.34,0.7l-1.88,-97.18l1.96,-10.33z\" fill=\"#3478e5\" fill-opacity=\"0.31\" stroke=\"black\" stroke-linecap=\"round\" stroke-width=\"0\"/\u003e\n                \u003c/g\u003e\n                \u003cg stroke-width=\"1.5\"\u003e\n                    \u003cline stroke=\"red\" stroke-linecap=\"round\" x1=\"50\" y1=\"50\" x2=\"60\" y2=\"40\" marker-end=\"url(#arrow-unit)\"/\u003e\n                    \u003cuse href=\"#dot\" x=\"50\" y=\"50\"/\u003e\n                \u003c/g\u003e\n            \u003c/svg\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003ca href=\"Sources/Geometria/Generalized/Hyperplane.swift\"\u003eHyperplane.swift\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Defined as a point vector on the plane and a \u003ca href=\"https://en.wikipedia.org/wiki/Unit_vector\"\u003eunit vector\u003c/a\u003e orthogonal to the hyperplane's surface. Defines a split between two \u003ca href=\"https://en.wikipedia.org/wiki/Half-space_(geometry)\"\u003ehalf-spaces\u003c/a\u003e of the space it is contained within. Is considered a convex, volumetric space that can be intersected against lines and contain points.\n        \u003c/td\u003e\n    \u003c/tr\u003e \n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003ca href=\"https://en.wikipedia.org/wiki/Line_(geometry)\"\u003eLine\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003csvg width=\"100\" height=\"100\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n                \u003crect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"white\"/\u003e\n                \u003cg transform=\"translate(20, 70) rotate(-35)\" stroke-width=\"2\"\u003e\n                    \u003cline x1=\"-100\" x2=\"100\" y2=\"0\" stroke=\"black\" stroke-linecap=\"round\"/\u003e\n                    \u003cuse href=\"#dot\"/\u003e\n                    \u003cuse href=\"#dot\" x=\"70\"/\u003e\n                \u003c/g\u003e\n            \u003c/svg\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003ca href=\"Sources/Geometria/Generalized/Line.swift\"\u003eLine.swift\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Defined as a pair of point vectors on the line.\n            Conceptually it extends to infinity at both ends.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003ca href=\"https://en.wikipedia.org/wiki/Line_segment\"\u003eLine segment\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003csvg width=\"100\" height=\"100\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n                \u003crect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"white\"/\u003e\n                \u003cg transform=\"translate(20, 70) rotate(-35)\" stroke-width=\"2\"\u003e\n                    \u003cline x1=\"0\" x2=\"70\" y2=\"0\" stroke=\"black\" stroke-linecap=\"round\"/\u003e\n                    \u003cuse href=\"#dot\"/\u003e\n                    \u003cuse href=\"#dot\" x=\"70\"/\u003e\n                \u003c/g\u003e\n            \u003c/svg\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003ca href=\"Sources/Geometria/Generalized/LineSegment.swift\"\u003eLineSegment.swift\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Defined as start and end point vectors on the line.\n            Conceptually it is contained only within the limits of start \u003c-\u003e end.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003ca href=\"https://en.wikipedia.org/wiki/Capsule_(geometry)\"\u003eN-dimensional capsule\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003csvg width=\"100\" height=\"100\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n                \u003crect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"white\"/\u003e\n                \u003cg transform=\"translate(12) scale(0.25)\" stroke-width=\"4\"\u003e\n                    \u003cg\u003e\n                        \u003cpath fill=\"none\" stroke=\"#231F20\" stroke-miterlimit=\"10\" d=\"M228,112.5c0,16.463-39.176,29.808-87.5,29.808   c-48.325,0-87.5-13.345-87.5-29.808\"/\u003e\n                        \u003cg\u003e\n                            \u003cg\u003e\n                                \u003cpath fill=\"none\" stroke=\"#231F20\" stroke-miterlimit=\"10\" d=\"M53,112.5c0-0.999,0.144-1.985,0.426-2.959\"/\u003e\n                                \u003cpath fill=\"none\" stroke=\"#231F20\" stroke-miterlimit=\"10\" stroke-dasharray=\"6.1156,6.1156\" d=\"     M56.397,104.247C66.904,91.799,100.58,82.692,140.5,82.692c42.541,0,77.992,10.342,85.868,24.049\"/\u003e\n                                \u003cpath fill=\"none\" stroke=\"#231F20\" stroke-miterlimit=\"10\" d=\"M227.574,109.541     c0.281,0.974,0.426,1.96,0.426,2.959\"/\u003e\n                            \u003c/g\u003e\n                        \u003c/g\u003e\n                    \u003c/g\u003e\n                    \u003cg\u003e\n                        \u003cpath fill=\"none\" stroke=\"#231F20\" stroke-miterlimit=\"10\" d=\"M228,287.5c0,16.463-39.176,29.808-87.5,29.808   c-48.325,0-87.5-13.345-87.5-29.808\"/\u003e\n                        \u003cg\u003e\n                            \u003cg\u003e\n                                \u003cpath fill=\"none\" stroke=\"#231F20\" stroke-miterlimit=\"10\" d=\"M53,287.5c0-0.998,0.144-1.985,0.426-2.959\"/\u003e\n                                \u003cpath fill=\"none\" stroke=\"#231F20\" stroke-miterlimit=\"10\" stroke-dasharray=\"6.1156,6.1156\" d=\"     M56.397,279.247c10.507-12.448,44.183-21.555,84.103-21.555c42.541,0,77.992,10.342,85.868,24.049\"/\u003e\n                                \u003cpath fill=\"none\" stroke=\"#231F20\" stroke-miterlimit=\"10\" d=\"M227.574,284.541     c0.281,0.974,0.426,1.961,0.426,2.959\"/\u003e\n                            \u003c/g\u003e\n                        \u003c/g\u003e\n                    \u003c/g\u003e\n                    \u003cg\u003e\n                        \u003cpath fill=\"none\" stroke=\"#231F20\" stroke-miterlimit=\"10\" d=\"M140.895,375C92.529,375,53,335.864,53,287.5v-175   C53,64.136,92.333,25,140.697,25\"/\u003e\n                        \u003cpath fill=\"none\" stroke=\"#231F20\" stroke-miterlimit=\"10\" d=\"M139.692,25.001   c48.364,0,88.308,39.136,88.308,87.5V287.5c0,48.366-39.539,87.5-87.904,87.5\"/\u003e\n                    \u003c/g\u003e\n                    \u003cg\u003e\n                        \u003cpath d=\"M140,110 h85\"\n                              stroke=\"black\"\n                              stroke-dasharray=\"6.1156,6.1156\"\n                              marker-end=\"url(#arrow-length)\"/\u003e\n                        \u003cpath d=\"M140,110 v170\"\n                              stroke=\"black\"\n                              marker-start=\"url(#circle)\"\n                              marker-mid=\"url(#circle)\"\n                              marker-end=\"url(#circle)\"/\u003e\n                    \u003c/g\u003e\n                \u003c/g\u003e\n            \u003c/svg\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003ca href=\"Sources/Geometria/Generalized/NCapsule.swift\"\u003eNCapsule.swift\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Defined as a line segment containing two point vectors describing the span of the capsule's body, and a scalar\n            radius that defines the maximal distance to the line segment points must be to be considered as contained within the capsule.\n            \u003cbr/\u003e\n            Specializes as a Stadium in 2D and Capsule in 3D.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003ca href=\"https://en.wikipedia.org/wiki/Hyperrectangle\"\u003eHyperrectangle\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003csvg width=\"100\" height=\"100\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n                \u003crect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"white\"/\u003e\n                \u003cg stroke-width=\"1\" transform=\"translate(12.5, 37)\"\u003e\n                    \u003cg transform=\"skewY(10)\"\u003e\n                        \u003crect width=\"50\" height=\"30\" stroke=\"black\" fill=\"transparent\"/\u003e\n                        \u003crect x=\"20\" y=\"-15\" width=\"50\" height=\"30\" stroke=\"black\" fill=\"transparent\"/\u003e\n                    \u003c/g\u003e\n                    \u003cg transform=\"skewY(-30)\"\u003e\n                        \u003crect width=\"20\" height=\"30\" stroke=\"black\" fill=\"transparent\"/\u003e\n                        \u003crect x=\"50\" y=\"38\" width=\"20\" height=\"30\" stroke=\"black\" fill=\"transparent\"/\u003e\n                    \u003c/g\u003e\n                    \u003cuse href=\"#dot\" y=\"30\"/\u003e\n                    \u003cpath d=\"M0,31.5 l47,6\" marker-end=\"url(#arrow-length)\"/\u003e\n                    \u003cpath d=\"M0,31.5 l0,-30\" marker-end=\"url(#arrow-length)\"/\u003e\n                    \u003cpath d=\"M0,31.5 l18,-12\" marker-end=\"url(#arrow-length)\"/\u003e\n                \u003c/g\u003e\n            \u003c/svg\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003ca href=\"Sources/Geometria/Generalized/NRectangle.swift\"\u003eNRectangle.swift\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Defined as an origin (top-left in two dimensions) point vector and an N-dimensional size vector.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003ca href=\"https://en.wikipedia.org/wiki/N-sphere\"\u003eN-sphere\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003csvg width=\"100\" height=\"100\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n                \u003crect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"white\"/\u003e\n                \u003cg transform=\"translate(-6, 5) scale(0.4)\" stroke-width=\"3\"\u003e\n                    \u003cg\u003e\n                        \u003cpath fill=\"none\" stroke=\"#231F20\" stroke-miterlimit=\"10\" d=\"M228,112.5c0,16.463-39.176,29.808-87.5,29.808   c-48.325,0-87.5-13.345-87.5-29.808\"/\u003e\n                        \u003cg\u003e\n                            \u003cg\u003e\n                                \u003cpath fill=\"none\" stroke=\"#231F20\" stroke-miterlimit=\"10\" d=\"M53,112.5c0-0.999,0.144-1.985,0.426-2.959\"/\u003e\n                                \u003cpath fill=\"none\" stroke=\"#231F20\" stroke-miterlimit=\"10\" stroke-dasharray=\"6.1156,6.1156\" d=\"     M56.397,104.247C66.904,91.799,100.58,82.692,140.5,82.692c42.541,0,77.992,10.342,85.868,24.049\"/\u003e\n                                \u003cpath fill=\"none\" stroke=\"#231F20\" stroke-miterlimit=\"10\" d=\"M227.574,109.541     c0.281,0.974,0.426,1.96,0.426,2.959\"/\u003e\n                            \u003c/g\u003e\n                        \u003c/g\u003e\n                    \u003c/g\u003e\n                    \u003cg\u003e\n                        \u003ccircle cx=\"140\" cy=\"111\" r=\"88\" fill=\"transparent\" stroke=\"black\"/\u003e\n                    \u003c/g\u003e\n                    \u003cg fill=\"none\" stroke=\"black\"\u003e\n                        \u003cline x1=\"140\" y1=\"111\" x2=\"220\" y2=\"111\" stroke-dasharray=\"6.1156,6.1156\" marker-end=\"url(#arrow-length)\"/\u003e\n                        \u003cuse href=\"#dot\" x=\"70\" y=\"55.5\" transform=\"scale(2)\"/\u003e\n                    \u003c/g\u003e\n                \u003c/g\u003e\n            \u003c/svg\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003ca href=\"Sources/Geometria/Generalized/NSphere.swift\"\u003eNSphere.swift\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Defined as a center point vector and a scalar radius.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003ca href=\"https://en.wikipedia.org/wiki/Hypercube\"\u003eN-dimensional cube (Hypercube)\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003csvg width=\"100\" height=\"100\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n                \u003crect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"white\"/\u003e\n                \u003cg stroke-width=\"0.75\" transform=\"translate(12.5, 30) scale(1.5)\" stroke-linejoin=\"round\"\u003e\n                    \u003cg transform=\"skewY(10)\"\u003e\n                        \u003crect width=\"30\" height=\"30\" stroke=\"black\" fill=\"transparent\"/\u003e\n                        \u003crect x=\"20\" y=\"-15.1\" width=\"30\" height=\"30\" stroke=\"black\" fill=\"transparent\"/\u003e\n                    \u003c/g\u003e\n                    \u003cg transform=\"skewY(-30)\"\u003e\n                        \u003crect width=\"20\" height=\"30\" stroke=\"black\" fill=\"transparent\"/\u003e\n                        \u003crect x=\"30\" y=\"22.7\" width=\"20\" height=\"30\" stroke=\"black\" fill=\"transparent\"/\u003e\n                    \u003c/g\u003e\n                \u003c/g\u003e\n                \u003cg fill=\"none\" stroke=\"black\"\u003e\n                    \u003cpath d=\"M13,74 l43,9\" stroke=\"none\" marker-end=\"url(#arrow-length)\"/\u003e\n                    \u003cuse href=\"#dot\" x=\"13\" y=\"74\"/\u003e\n                \u003c/g\u003e\n            \u003c/svg\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003ca href=\"Sources/Geometria/Generalized/NSquare.swift\"\u003eNSquare.swift\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Generalized for any dimension.\n            \u003cbr/\u003e\n            Defined as an origin point (top-left in two dimensions) and a scalar value that describes the span of the\n            cube, in each dimension.\n            \u003cbr/\u003e\n            Forms a square in 2D, and a cube in 3D.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003ca href=\"https://en.wikipedia.org/wiki/Plane_(geometry)#Point%E2%80%93normal_form_and_general_form_of_the_equation_of_a_plane\"\u003ePlane\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003csvg width=\"100\" height=\"100\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n                \u003crect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"white\"/\u003e\n                \u003cdefs\u003e\n                    \u003cmask id=\"myMask\"\u003e\n                        \u003cg transform=\"rotate(30)\"\u003e\n                            \u003crect fill=\"white\" x=\"-50\" y=\"-5\" width=\"200\" height=\"100%\"/\u003e\n                        \u003c/g\u003e\n                    \u003c/mask\u003e\n                \u003c/defs\u003e\n                \u003cg stroke-width=\"0.75\" stroke-linejoin=\"round\" transform=\"translate(12.5, 30) scale(1.5) skewY(10) skewX(-40)\"\u003e\n                    \u003cg stroke=\"#c0c0c0\" mask=\"url(#myMask)\"\u003e\n                        \u003cpath d=\"M -15,-30  v100\"/\u003e\n                        \u003cpath d=\"M -5,-30   v100\"/\u003e\n                        \u003cpath d=\"M 5,-30    v100\"/\u003e\n                        \u003cpath d=\"M 15,-30   v100\"/\u003e\n                        \u003cpath d=\"M 25,-30   v100\"/\u003e\n                        \u003cpath d=\"M 35,-30   v100\"/\u003e\n                        \u003cpath d=\"M 45,-30   v100\"/\u003e\n                        \u003cpath d=\"M 55,-30   v100\"/\u003e\n                        \u003cpath d=\"M 65,-30   v100\"/\u003e\n                        \u003cpath d=\"M 75,-30   v100\"/\u003e\n                        \u003cpath d=\"M 85,-30   v100\"/\u003e\n                        \u003cg display=\"none\"\u003e\n                            \u003cpath d=\"M -20,-30  v100\"/\u003e\n                            \u003cpath d=\"M -10,-30  v100\"/\u003e\n                            \u003cpath d=\"M 0,-30    v100\"/\u003e\n                            \u003cpath d=\"M 10,-30   v100\"/\u003e\n                            \u003cpath d=\"M 20,-30   v100\"/\u003e\n                            \u003cpath d=\"M 30,-30   v100\"/\u003e\n                            \u003cpath d=\"M 40,-30   v100\"/\u003e\n                            \u003cpath d=\"M 50,-30   v100\"/\u003e\n                            \u003cpath d=\"M 60,-30   v100\"/\u003e\n                            \u003cpath d=\"M 70,-30   v100\"/\u003e\n                            \u003cpath d=\"M 80,-30   v100\"/\u003e\n                        \u003c/g\u003e\n                        \u003cpath d=\"M -20,-25  h100\"/\u003e\n                        \u003cpath d=\"M -20,-15  h100\"/\u003e\n                        \u003cpath d=\"M -20,-5   h100\"/\u003e\n                        \u003cpath d=\"M -10,5    h100\"/\u003e\n                        \u003cpath d=\"M -10,15   h100\"/\u003e\n                        \u003cpath d=\"M -10,25   h100\"/\u003e\n                        \u003cpath d=\"M -10,35   h100\"/\u003e\n                        \u003cpath d=\"M -10,45   h100\"/\u003e\n                        \u003cpath d=\"M -10,55   h100\"/\u003e\n                        \u003cg display=\"none\"\u003e\n                            \u003cpath d=\"M -20,-20  h100\"/\u003e\n                            \u003cpath d=\"M -20,-10  h100\"/\u003e\n                            \u003cpath d=\"M -20,0    h100\"/\u003e\n                            \u003cpath d=\"M -10,10   h100\"/\u003e\n                            \u003cpath d=\"M -10,20   h100\"/\u003e\n                            \u003cpath d=\"M -10,30   h100\"/\u003e\n                            \u003cpath d=\"M -10,40   h100\"/\u003e\n                            \u003cpath d=\"M -10,50   h100\"/\u003e\n                        \u003c/g\u003e\n                    \u003c/g\u003e\n                \u003c/g\u003e\n                \u003cg stroke=\"#000000\" transform=\"translate(27, 4)\"\u003e\n                    \u003cpath d=\"M20,50 l-12,-7\" marker-start=\"url(#circle)\" marker-end=\"url(#arrow-unit)\"/\u003e\n                \u003c/g\u003e\n            \u003c/svg\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003ca href=\"Sources/Geometria/Generalized/PointNormalPlane.swift\"\u003ePointNormalPlane.swift\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Defined as a point vector on the plane and a \u003ca href=\"https://en.wikipedia.org/wiki/Unit_vector\"\u003eunit vector\u003c/a\u003e orthogonal to the plane's surface.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003ca href=\"https://en.wikipedia.org/wiki/Line_(geometry)#Ray\"\u003eRay (two-point)\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003csvg width=\"100\" height=\"100\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n                \u003crect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"white\"/\u003e\n                \u003cg transform=\"translate(20, 70) rotate(-35)\" stroke-width=\"2\"\u003e\n                    \u003cline x1=\"0\" x2=\"100\" y2=\"0\" stroke=\"black\" stroke-linecap=\"round\"/\u003e\n                    \u003cuse href=\"#dot\"/\u003e\n                    \u003cuse href=\"#dot\" x=\"70\"/\u003e\n                \u003c/g\u003e\n            \u003c/svg\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003ca href=\"Sources/Geometria/Generalized/Ray.swift\"\u003eRay.swift\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Defined as a pair of points start and b describing the two points the ray crosses before projecting to infinity.\n            \u003c/br\u003e\n            Similar in definition to a line and line segment, but extends in one direction to infinity.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003ca href=\"https://en.wikipedia.org/wiki/Triangle\"\u003eTriangle\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003csvg width=\"100\" height=\"100\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"\u003e\n                \u003crect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"white\"/\u003e\n                \u003cpath d=\"M17,75 l20,-55 l40,30 z\" fill=\"none\" stroke=\"black\"\n                        marker-start=\"url(#circle)\"\n                        marker-mid=\"url(#circle)\"\n                        marker-end=\"url(#circle)\"/\u003e\n            \u003c/svg\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003ca href=\"Sources/Geometria/Generalized/Triangle.swift\"\u003eTriangle.swift\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            Defined as a set of three point vectors.\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n## GeometriaClipping\n\nAn extra library dependency exported called `GeometriaClipping` can be used to generate boolean geometry from input geometries composed of line and circular arc simplexes.\n\nThe operations supported are the following:\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003cth\u003e2-dimensional\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003cth\u003eOperation\u003c/th\u003e\n        \u003cth\u003eIllustration\u003c/th\u003e\n        \u003cth\u003eGeometriaClipping type\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003ca href=\"https://en.wikipedia.org/wiki/Union_(set_theory)\"\u003eUnion\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"img/venn_union.png\"/\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003ca href=\"Sources/GeometriaClipping/2D/Boolean/Union2Parametric.swift\"\u003eUnion2Parametric.swift\u003c/a\u003e\n        \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003ca href=\"https://en.wikipedia.org/wiki/Intersection_(set_theory)\"\u003eIntersection\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"img/venn_intersection.png\"/\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003ca href=\"Sources/GeometriaClipping/2D/Boolean/Intersection2Parametric.swift\"\u003eIntersection2Parametric.swift\u003c/a\u003e\n        \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003ca href=\"https://en.wikipedia.org/wiki/Complement_(set_theory)#Relative_complement\"\u003eSubtraction\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"img/venn_subtraction.png\"/\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003ca href=\"Sources/GeometriaClipping/2D/Boolean/Subtraction2Parametric.swift\"\u003eSubtraction2Parametric.swift\u003c/a\u003e\n        \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n        \u003ctd\u003e\n            \u003ca href=\"https://en.wikipedia.org/wiki/Symmetric_difference\"\u003eExclusive disjunction or Symmetric Difference\u003c/a\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003cimg src=\"img/venn_xor.png\"/\u003e\n        \u003c/td\u003e\n        \u003ctd\u003e\n            \u003ca href=\"Sources/GeometriaClipping/2D/Boolean/ExclusiveDisjunction2Parametric.swift\"\u003eExclusiveDisjunction2Parametric.swift\u003c/a\u003e\n        \u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluizzak%2Fgeometria","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fluizzak%2Fgeometria","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluizzak%2Fgeometria/lists"}