Mercurial > repos > public > sbplib_julia
comparison src/Grids/geometry.jl @ 1916:6859089b361e feature/grids/geometry_functions
Remove abstract types for Curve and surface
| author | Jonatan Werpers <jonatan@werpers.com> |
|---|---|
| date | Mon, 03 Feb 2025 15:44:07 +0100 |
| parents | c003685d9926 |
| children | 478b233999c5 |
comparison
equal
deleted
inserted
replaced
| 1915:c003685d9926 | 1916:6859089b361e |
|---|---|
| 1 ### | 1 struct Line{PT} |
| 2 # Geometry | |
| 3 ### | |
| 4 | |
| 5 abstract type Curve end | |
| 6 abstract type Surface end | |
| 7 | |
| 8 | |
| 9 struct Line{PT} <: Curve | |
| 10 p::PT | 2 p::PT |
| 11 tangent::PT | 3 tangent::PT |
| 12 end | 4 end |
| 13 | 5 |
| 14 (c::Line)(s) = c.p + s*c.tangent | 6 (c::Line)(s) = c.p + s*c.tangent |
| 15 | 7 |
| 16 | 8 |
| 17 struct LineSegment{PT} <: Curve | 9 struct LineSegment{PT} |
| 18 a::PT | 10 a::PT |
| 19 b::PT | 11 b::PT |
| 20 end | 12 end |
| 21 | 13 |
| 22 (c::LineSegment)(s) = (1-s)*c.a + s*c.b | 14 (c::LineSegment)(s) = (1-s)*c.a + s*c.b |
| 30 function polygon_edges(ps...) | 22 function polygon_edges(ps...) |
| 31 n = length(ps) | 23 n = length(ps) |
| 32 return [LineSegment(ps[i], ps[mod1(i+1,n)]) for i ∈ eachindex(ps)] | 24 return [LineSegment(ps[i], ps[mod1(i+1,n)]) for i ∈ eachindex(ps)] |
| 33 end | 25 end |
| 34 | 26 |
| 35 struct Circle{T,PT} <: Curve | 27 struct Circle{T,PT} |
| 36 c::PT | 28 c::PT |
| 37 r::T | 29 r::T |
| 38 end | 30 end |
| 39 | 31 |
| 40 function (C::Circle)(θ) | 32 function (C::Circle)(θ) |
| 41 (;c, r) = C | 33 (;c, r) = C |
| 42 c + r*@SVector[cos(θ), sin(θ)] | 34 c + r*@SVector[cos(θ), sin(θ)] |
| 43 end | 35 end |
| 44 | 36 |
| 45 struct TransfiniteInterpolationSurface{T1,T2,T3,T4} <: Surface | 37 struct TransfiniteInterpolationSurface{T1,T2,T3,T4} |
| 46 c₁::T1 | 38 c₁::T1 |
| 47 c₂::T2 | 39 c₂::T2 |
| 48 c₃::T3 | 40 c₃::T3 |
| 49 c₄::T4 | 41 c₄::T4 |
| 50 end | 42 end |
