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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
9e89084cbba4 Add some todos
Jonatan Werpers <jonatan@werpers.com>
parents: 1970
diff changeset
87 # TODO: Implement a check function for transfinite interpolations
9e89084cbba4 Add some todos
Jonatan Werpers <jonatan@werpers.com>
parents: 1970
diff changeset
88 # TODO: Add doc strings