Mercurial > repos > public > sbplib_julia
annotate src/Grids/geometry.jl @ 1971:9e89084cbba4 feature/grids/geometry_functions
Add some todos
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Fri, 14 Feb 2025 08:32:12 +0100 |
parents | deeb61325320 |
children | 8e9575b518a1 |
rev | line source |
---|---|
1916
6859089b361e
Remove abstract types for Curve and surface
Jonatan Werpers <jonatan@werpers.com>
parents:
1915
diff
changeset
|
1 struct Line{PT} |
1915
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
2 p::PT |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
3 tangent::PT |
1966
478b233999c5
Add tests and better constructors for Line
Jonatan Werpers <jonatan@werpers.com>
parents:
1916
diff
changeset
|
4 |
478b233999c5
Add tests and better constructors for Line
Jonatan Werpers <jonatan@werpers.com>
parents:
1916
diff
changeset
|
5 Line{PT}(p::PT, tangent::PT) where PT = new{PT}(p,tangent) |
478b233999c5
Add tests and better constructors for Line
Jonatan Werpers <jonatan@werpers.com>
parents:
1916
diff
changeset
|
6 end |
478b233999c5
Add tests and better constructors for Line
Jonatan Werpers <jonatan@werpers.com>
parents:
1916
diff
changeset
|
7 |
478b233999c5
Add tests and better constructors for Line
Jonatan Werpers <jonatan@werpers.com>
parents:
1916
diff
changeset
|
8 function Line(p, t) |
1970
deeb61325320
Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1969
diff
changeset
|
9 p = SVector{length(p)}(p) |
deeb61325320
Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1969
diff
changeset
|
10 t = SVector{length(t)}(t) |
deeb61325320
Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1969
diff
changeset
|
11 p, t = promote(p, t) |
1966
478b233999c5
Add tests and better constructors for Line
Jonatan Werpers <jonatan@werpers.com>
parents:
1916
diff
changeset
|
12 |
1970
deeb61325320
Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1969
diff
changeset
|
13 return Line{typeof(p)}(p,t) |
1915
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
14 end |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
15 |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
16 (c::Line)(s) = c.p + s*c.tangent |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
17 |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
18 |
1916
6859089b361e
Remove abstract types for Curve and surface
Jonatan Werpers <jonatan@werpers.com>
parents:
1915
diff
changeset
|
19 struct LineSegment{PT} |
1915
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
20 a::PT |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
21 b::PT |
1967
669361a8195a
Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1966
diff
changeset
|
22 |
669361a8195a
Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1966
diff
changeset
|
23 LineSegment{PT}(p::PT, tangent::PT) where PT = new{PT}(p,tangent) |
669361a8195a
Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1966
diff
changeset
|
24 end |
669361a8195a
Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1966
diff
changeset
|
25 |
669361a8195a
Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1966
diff
changeset
|
26 function LineSegment(a, b) |
1970
deeb61325320
Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1969
diff
changeset
|
27 a = SVector{length(a)}(a) |
deeb61325320
Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1969
diff
changeset
|
28 b = SVector{length(b)}(b) |
deeb61325320
Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1969
diff
changeset
|
29 a, b = promote(a, b) |
1967
669361a8195a
Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1966
diff
changeset
|
30 |
1970
deeb61325320
Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1969
diff
changeset
|
31 return LineSegment{typeof(a)}(a,b) |
1915
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
32 end |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
33 |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
34 (c::LineSegment)(s) = (1-s)*c.a + s*c.b |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
35 |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
36 |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
37 function linesegments(ps...) |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
38 return [LineSegment(ps[i], ps[i+1]) for i ∈ 1:length(ps)-1] |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
39 end |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
40 |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
41 |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
42 function polygon_edges(ps...) |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
43 n = length(ps) |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
44 return [LineSegment(ps[i], ps[mod1(i+1,n)]) for i ∈ eachindex(ps)] |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
45 end |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
46 |
1969
7f4a5146c84c
Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents:
1967
diff
changeset
|
47 struct Circle{PT,T} |
1915
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
48 c::PT |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
49 r::T |
1969
7f4a5146c84c
Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents:
1967
diff
changeset
|
50 |
7f4a5146c84c
Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents:
1967
diff
changeset
|
51 Circle{PT,T}(c,r) where {PT,T} = new{PT,T}(c,r) |
7f4a5146c84c
Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents:
1967
diff
changeset
|
52 end |
7f4a5146c84c
Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents:
1967
diff
changeset
|
53 |
7f4a5146c84c
Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents:
1967
diff
changeset
|
54 function Circle(c,r) |
7f4a5146c84c
Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents:
1967
diff
changeset
|
55 c = SVector{2}(c) |
7f4a5146c84c
Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents:
1967
diff
changeset
|
56 return Circle{typeof(c), typeof(r)}(c,r) |
1915
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
57 end |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
58 |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
59 function (C::Circle)(θ) |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
60 (;c, r) = C |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
61 c + r*@SVector[cos(θ), sin(θ)] |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
62 end |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
63 |
1916
6859089b361e
Remove abstract types for Curve and surface
Jonatan Werpers <jonatan@werpers.com>
parents:
1915
diff
changeset
|
64 struct TransfiniteInterpolationSurface{T1,T2,T3,T4} |
1915
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
65 c₁::T1 |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
66 c₂::T2 |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
67 c₃::T3 |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
68 c₄::T4 |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
69 end |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
70 |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
71 function (s::TransfiniteInterpolationSurface)(u,v) |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
72 c₁, c₂, c₃, c₄ = s.c₁, s.c₂, s.c₃, s.c₄ |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
73 P₀₀ = c₁(0) |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
74 P₁₀ = c₂(0) |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
75 P₁₁ = c₃(0) |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
76 P₀₁ = c₄(0) |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
77 return (1-v)*c₁(u) + u*c₂(v) + v*c₃(1-u) + (1-u)*c₄(1-v) - ( |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
78 (1-u)*(1-v)*P₀₀ + u*(1-v)*P₁₀ + u*v*P₁₁ + (1-u)*v*P₀₁ |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
79 ) |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
80 end |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
81 |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
82 function (s::TransfiniteInterpolationSurface)(ξ̄::AbstractArray) |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
83 s(ξ̄...) |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
84 end |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
85 |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
86 # TODO: Implement jacobian() for the different mapping helpers |
1971 | 87 # TODO: Implement a check function for transfinite interpolations |
88 # TODO: Add doc strings |