From 2e0ba29cd0de1e88bed78a96f587613bcf3cc97c Mon Sep 17 00:00:00 2001 From: Gloria Mundi Date: Mon, 15 Apr 2024 02:41:45 +0200 Subject: typo fixes --- geometry/formulars.cpp | 42 ---------------------------------- geometry/formulars3d.cpp | 53 ------------------------------------------- geometry/formulas.cpp | 42 ++++++++++++++++++++++++++++++++++ geometry/formulas3d.cpp | 53 +++++++++++++++++++++++++++++++++++++++++++ geometry/geometry.tex | 4 ++-- geometry/linesAndSegments.cpp | 2 +- 6 files changed, 98 insertions(+), 98 deletions(-) delete mode 100644 geometry/formulars.cpp delete mode 100644 geometry/formulars3d.cpp create mode 100644 geometry/formulas.cpp create mode 100644 geometry/formulas3d.cpp (limited to 'geometry') diff --git a/geometry/formulars.cpp b/geometry/formulars.cpp deleted file mode 100644 index e34b3c6..0000000 --- a/geometry/formulars.cpp +++ /dev/null @@ -1,42 +0,0 @@ -// Komplexe Zahlen als Punkte. Wenn immer möglich complex -// verwenden. Funktionen wie abs() geben dann aber ll zurück. -using pt = complex; - -constexpr double PIU = acos(-1.0l); // PIL < PI < PIU -constexpr double PIL = PIU-2e-19l; - -// Winkel zwischen Punkt und x-Achse in [-PI, PI]. -double angle(pt a) {return arg(a);} - -// rotiert Punkt im Uhrzeigersinn um den Ursprung. -pt rotate(pt a, double theta) {return a * polar(1.0, theta);} - -// Skalarprodukt. -double dot(pt a, pt b) {return real(conj(a) * b);} - -// abs()^2.(pre c++20) -double norm(pt a) {return dot(a, a);} - -// Kreuzprodukt, 0, falls kollinear. -double cross(pt a, pt b) {return imag(conj(a) * b);} -double cross(pt p, pt a, pt b) {return cross(a - p, b - p);} - -// 1 => c links von a->b -// 0 => a, b und c kolliniear -// -1 => c rechts von a->b -int orientation(pt a, pt b, pt c) { - double orien = cross(b - a, c - a); - return (orien > EPS) - (orien < -EPS); -} - -// Liegt d in der gleichen Ebene wie a, b, und c? -bool isCoplanar(pt a, pt b, pt c, pt d) { - return abs((b - a) * (c - a) * (d - a)) < EPS; -} - -// identifiziert winkel zwischen Vektoren u und v -pt uniqueAngle(pt u, pt v) { - pt tmp = v * conj(u); - ll g = abs(gcd(real(tmp), imag(tmp))); - return tmp / g; -} diff --git a/geometry/formulars3d.cpp b/geometry/formulars3d.cpp deleted file mode 100644 index 84e17c0..0000000 --- a/geometry/formulars3d.cpp +++ /dev/null @@ -1,53 +0,0 @@ -// Skalarprodukt -double operator|(pt3 a, pt3 b) { - return a.x * b.x + a.y*b.y + a.z*b.z; -} -double dot(pt3 a, pt3 b) {return a|b;} - -// Kreuzprodukt -pt3 operator*(pt3 a, pt3 b) {return {a.y*b.z - a.z*b.y, - a.z*b.x - a.x*b.z, - a.x*b.y - a.y*b.x};} -pt3 cross(pt3 a, pt3 b) {return a*b;} - -// Länge von a -double abs(pt3 a) {return sqrt(dot(a, a));} -double abs(pt3 a, pt3 b) {return abs(b - a);} - -// Mixedprodukt -double mixed(pt3 a, pt3 b, pt3 c) {return a*b|c;}; - -// orientierung von p zu der Ebene durch a, b, c -// -1 => gegen den Uhrzeigersinn, -// 0 => kolliniear, -// 1 => im Uhrzeigersinn. -int orientation(pt3 a, pt3 b, pt3 c, pt3 p) { - double orien = mixed(b - a, c - a, p - a); - return (orien > EPS) - (orien < -EPS); -} - -// Entfernung von Punkt p zur Ebene a,b,c. -double distToPlane(pt3 a, pt3 b, pt3 c, pt3 p) { - pt3 n = cross(b-a, c-a); - return (abs(dot(n, p)) - dot(n, a)) / abs(n); -} - -// Liegt p in der Ebene a,b,c? -bool pointOnPlane(pt3 a, pt3 b, pt3 c, pt3 p) { - return orientation(a, b, c, p) == 0; -} - -// Schnittpunkt von der Grade a-b und der Ebene c,d,e -// die Grade darf nicht parallel zu der Ebene sein! -pt3 linePlaneIntersection(pt3 a, pt3 b, pt3 c, pt3 d, pt3 e) { - pt3 n = cross(d-c, e-c); - pt3 d = b - a; - return a - d * (dot(n, a) - dot(n, c)) / dot(n, d); -} - -// Abstand zwischen der Grade a-b und c-d -double lineLineDist(pt3 a, pt3 b, pt3 c, pt3 d) { - pt3 n = cross(b - a, d - c); - if (abs(n) < EPS) return distToLine(a, b, c); - return abs(dot(a - c, n)) / abs(n); -} diff --git a/geometry/formulas.cpp b/geometry/formulas.cpp new file mode 100644 index 0000000..e34b3c6 --- /dev/null +++ b/geometry/formulas.cpp @@ -0,0 +1,42 @@ +// Komplexe Zahlen als Punkte. Wenn immer möglich complex +// verwenden. Funktionen wie abs() geben dann aber ll zurück. +using pt = complex; + +constexpr double PIU = acos(-1.0l); // PIL < PI < PIU +constexpr double PIL = PIU-2e-19l; + +// Winkel zwischen Punkt und x-Achse in [-PI, PI]. +double angle(pt a) {return arg(a);} + +// rotiert Punkt im Uhrzeigersinn um den Ursprung. +pt rotate(pt a, double theta) {return a * polar(1.0, theta);} + +// Skalarprodukt. +double dot(pt a, pt b) {return real(conj(a) * b);} + +// abs()^2.(pre c++20) +double norm(pt a) {return dot(a, a);} + +// Kreuzprodukt, 0, falls kollinear. +double cross(pt a, pt b) {return imag(conj(a) * b);} +double cross(pt p, pt a, pt b) {return cross(a - p, b - p);} + +// 1 => c links von a->b +// 0 => a, b und c kolliniear +// -1 => c rechts von a->b +int orientation(pt a, pt b, pt c) { + double orien = cross(b - a, c - a); + return (orien > EPS) - (orien < -EPS); +} + +// Liegt d in der gleichen Ebene wie a, b, und c? +bool isCoplanar(pt a, pt b, pt c, pt d) { + return abs((b - a) * (c - a) * (d - a)) < EPS; +} + +// identifiziert winkel zwischen Vektoren u und v +pt uniqueAngle(pt u, pt v) { + pt tmp = v * conj(u); + ll g = abs(gcd(real(tmp), imag(tmp))); + return tmp / g; +} diff --git a/geometry/formulas3d.cpp b/geometry/formulas3d.cpp new file mode 100644 index 0000000..84e17c0 --- /dev/null +++ b/geometry/formulas3d.cpp @@ -0,0 +1,53 @@ +// Skalarprodukt +double operator|(pt3 a, pt3 b) { + return a.x * b.x + a.y*b.y + a.z*b.z; +} +double dot(pt3 a, pt3 b) {return a|b;} + +// Kreuzprodukt +pt3 operator*(pt3 a, pt3 b) {return {a.y*b.z - a.z*b.y, + a.z*b.x - a.x*b.z, + a.x*b.y - a.y*b.x};} +pt3 cross(pt3 a, pt3 b) {return a*b;} + +// Länge von a +double abs(pt3 a) {return sqrt(dot(a, a));} +double abs(pt3 a, pt3 b) {return abs(b - a);} + +// Mixedprodukt +double mixed(pt3 a, pt3 b, pt3 c) {return a*b|c;}; + +// orientierung von p zu der Ebene durch a, b, c +// -1 => gegen den Uhrzeigersinn, +// 0 => kolliniear, +// 1 => im Uhrzeigersinn. +int orientation(pt3 a, pt3 b, pt3 c, pt3 p) { + double orien = mixed(b - a, c - a, p - a); + return (orien > EPS) - (orien < -EPS); +} + +// Entfernung von Punkt p zur Ebene a,b,c. +double distToPlane(pt3 a, pt3 b, pt3 c, pt3 p) { + pt3 n = cross(b-a, c-a); + return (abs(dot(n, p)) - dot(n, a)) / abs(n); +} + +// Liegt p in der Ebene a,b,c? +bool pointOnPlane(pt3 a, pt3 b, pt3 c, pt3 p) { + return orientation(a, b, c, p) == 0; +} + +// Schnittpunkt von der Grade a-b und der Ebene c,d,e +// die Grade darf nicht parallel zu der Ebene sein! +pt3 linePlaneIntersection(pt3 a, pt3 b, pt3 c, pt3 d, pt3 e) { + pt3 n = cross(d-c, e-c); + pt3 d = b - a; + return a - d * (dot(n, a) - dot(n, c)) / dot(n, d); +} + +// Abstand zwischen der Grade a-b und c-d +double lineLineDist(pt3 a, pt3 b, pt3 c, pt3 d) { + pt3 n = cross(b - a, d - c); + if (abs(n) < EPS) return distToLine(a, b, c); + return abs(dot(a - c, n)) / abs(n); +} diff --git a/geometry/geometry.tex b/geometry/geometry.tex index 2a22552..57c8092 100644 --- a/geometry/geometry.tex +++ b/geometry/geometry.tex @@ -28,7 +28,7 @@ \end{algorithm} \subsection{Formeln~~--~\texttt{std::complex}} -\sourcecode{geometry/formulars.cpp} +\sourcecode{geometry/formulas.cpp} \sourcecode{geometry/linesAndSegments.cpp} \sourcecode{geometry/sortAround.cpp} \input{geometry/triangle} @@ -37,7 +37,7 @@ \sourcecode{geometry/circle.cpp} \subsection{Formeln -- 3D} -\sourcecode{geometry/formulars3d.cpp} +\sourcecode{geometry/formulas3d.cpp} \optional{ \subsection{3D-Kugeln \opthint} diff --git a/geometry/linesAndSegments.cpp b/geometry/linesAndSegments.cpp index c86b331..c3c09f7 100644 --- a/geometry/linesAndSegments.cpp +++ b/geometry/linesAndSegments.cpp @@ -31,7 +31,7 @@ vector lineSegmentIntersection(pt p0, pt p1, pt p2, pt p3) { return result; } -// Entfernung von Punkt p zur Gearden durch a-b. 2d und 3d +// Entfernung von Punkt p zur Geraden durch a-b. 2d und 3d double distToLine(pt a, pt b, pt p) { return abs(cross(p - a, b - a)) / abs(b - a); } -- cgit v1.2.3