From 5374c80b1563bf351eacf62d70b54b4114e8dab5 Mon Sep 17 00:00:00 2001 From: Christopher Diggins <cdiggins@gmail.com> Date: Thu, 21 Mar 2024 20:25:33 -0400 Subject: [PATCH] Resolved all of the remaining symbol resolution errors. --- PlatoCompiler/Symbols/TypeExpression.cs | 2 +- PlatoStandardLibrary/std.angles.library.plato | 8 ++++---- PlatoStandardLibrary/std.geometry.concepts.plato | 11 +++++++++-- PlatoStandardLibrary/std.geometry.types.plato | 13 ++++++------- PlatoStandardLibrary/std.measures.library.plato | 2 +- PlatoStandardLibrary/std.numerics.library.plato | 5 ++++- PlatoStandardLibrary/std.types.plato | 12 ++++++++++++ 7 files changed, 37 insertions(+), 16 deletions(-) diff --git a/PlatoCompiler/Symbols/TypeExpression.cs b/PlatoCompiler/Symbols/TypeExpression.cs index 0572380..ae22e32 100644 --- a/PlatoCompiler/Symbols/TypeExpression.cs +++ b/PlatoCompiler/Symbols/TypeExpression.cs @@ -8,7 +8,7 @@ namespace Plato.Compiler.Symbols { public class TypeExpression : Symbol { - public override string Name => Definition?.Name ?? throw new Exception("Unresolved"); + public override string Name => Definition?.Name ?? "_untyped_"; public TypeDefinition Definition { get; } public IReadOnlyList<TypeExpression> TypeArgs { get; } diff --git a/PlatoStandardLibrary/std.angles.library.plato b/PlatoStandardLibrary/std.angles.library.plato index 8e00745..c57eb1e 100644 --- a/PlatoStandardLibrary/std.angles.library.plato +++ b/PlatoStandardLibrary/std.angles.library.plato @@ -69,9 +69,9 @@ library Angles //== // Complex plane trig: https://en.wikipedia.org/wiki/Trigonometric_functions#In_the_complex_plane - Sin(x: Complex): Complex - => (x.Sin * y.Cosh, x.Cos * y.Sinh); + Sin(c: Complex): Complex + => (c.X.Sin * c.Y.Cosh, c.X.Cos * c.Y.Sinh); - Cos(x: Complex): Complex - => (x.Cos * y.Cosh, x.Sin * y.Sinh); + Cos(c: Complex): Complex + => (c.X.Cos * c.Y.Cosh, c.X.Sin * c.Y.Sinh); } diff --git a/PlatoStandardLibrary/std.geometry.concepts.plato b/PlatoStandardLibrary/std.geometry.concepts.plato index 08d05c0..919fb97 100644 --- a/PlatoStandardLibrary/std.geometry.concepts.plato +++ b/PlatoStandardLibrary/std.geometry.concepts.plato @@ -223,6 +223,13 @@ concept ImplicitVolume inherits Geometry3D, ImplicitProcedural<Point3D> { } +// Any geometrical concept defined by a finite number of points +concept Points2D + inherits Geometry2D +{ + Points(x: Self): Array<Point2D>; +} + // Any geometrical concept defined by a finite number of points concept Points3D inherits Geometry3D @@ -232,13 +239,13 @@ concept Points3D // https://en.wikipedia.org/wiki/B%C3%A9zier_surface concept BezierPatch - inherits Points3D, Surface3D, Array2D<Point3D> + inherits Points3D, Surface, Array2D<Point3D> { } // A grid of bezier patches // https://en.wikipedia.org/wiki/B%C3%A9zier_surface concept BezierSurface - inherits Points3D, Surface3D, Array2D<BicubicBezierPatch> + inherits Points3D, Surface, Array2D<BicubicBezierPatch> { } // https://en.wikipedia.org/wiki/Polyhedron diff --git a/PlatoStandardLibrary/std.geometry.types.plato b/PlatoStandardLibrary/std.geometry.types.plato index 1c1674a..36ec502 100644 --- a/PlatoStandardLibrary/std.geometry.types.plato +++ b/PlatoStandardLibrary/std.geometry.types.plato @@ -10,7 +10,7 @@ type Point2D } type Line2D - implements OpenPolygon2D + implements PolygonalChain2D { A: Point2D; B: Point2D; @@ -147,7 +147,7 @@ type Point3D } type Line3D - implements OpenPolygon3D + implements PolygonalChain3D { A: Point3D; B: Point3D; @@ -221,10 +221,9 @@ type BicubicBezierPatch K22: Point3D; } - // https://en.wikipedia.org/wiki/B%C3%A9zier_curve type CubicBezier2D - implements PointsGeometry2D + implements Points2D { A: Point2D; B: Point2D; @@ -234,7 +233,7 @@ type CubicBezier2D // https://en.wikipedia.org/wiki/B%C3%A9zier_curve type CubicBezier3D - implements PointsGeometry3D + implements Points3D { A: Point3D; B: Point3D; @@ -244,7 +243,7 @@ type CubicBezier3D // https://en.wikipedia.org/wiki/B%C3%A9zier_curve type QuadraticBezier2D - implements PointsGeometry2D + implements Points2D { A: Point2D; B: Point2D; @@ -253,7 +252,7 @@ type QuadraticBezier2D // https://en.wikipedia.org/wiki/B%C3%A9zier_curve type QuadraticBezier3D - implements PointsGeometry3D + implements Points3D { A: Point3D; B: Point3D; diff --git a/PlatoStandardLibrary/std.measures.library.plato b/PlatoStandardLibrary/std.measures.library.plato index 94da076..d32f295 100644 --- a/PlatoStandardLibrary/std.measures.library.plato +++ b/PlatoStandardLibrary/std.measures.library.plato @@ -211,6 +211,6 @@ library Measures => length.Meters / Constants.MetersPerAU; HubbleLength(length: Length): Number - => value.Meters / 1.HubbleLength.Meters; + => length.Meters / 1.HubbleLength.Meters; } diff --git a/PlatoStandardLibrary/std.numerics.library.plato b/PlatoStandardLibrary/std.numerics.library.plato index 6a505f5..b2dcec3 100644 --- a/PlatoStandardLibrary/std.numerics.library.plato +++ b/PlatoStandardLibrary/std.numerics.library.plato @@ -104,7 +104,10 @@ library Numerical => (x-y).Abs <= x.MultiplyEpsilon(y); AlmostZero(x: Number): Boolean - => x.Abs < Epsilon; + => x.Abs < Epsilon; + + AlmostZeroOrOne(x: Number): Boolean + => AlmostEqual(x, 0) || AlmostEqual(x, 1); Lerp(a: ScalarArithmetic, b: ScalarArithmetic, t: Number): ScalarArithmetic => a * t.FromOne + b * t; diff --git a/PlatoStandardLibrary/std.types.plato b/PlatoStandardLibrary/std.types.plato index d4a62bb..440d59b 100644 --- a/PlatoStandardLibrary/std.types.plato +++ b/PlatoStandardLibrary/std.types.plato @@ -435,6 +435,18 @@ type NumberInterval Max: Number; } +// Affine 2D transformation matrix +// https://en.wikipedia.org/wiki/Transformation_matrix#Affine_transformations +type Matrix2D + implements Value, Vector +{ + Column1: Vector3D; + Column2: Vector3D; + Column3: Vector3D; +} + +// Affine 3D transformation matrix +// https://en.wikipedia.org/wiki/Transformation_matrix#Affine_transformations // https://mindcontrol.org/~hplus/graphics/matrix-layout.html // Column major layout in memory // Translation component is in Column4.XYZ