annotate src/Grids/geometry.jl @ 1967:669361a8195a feature/grids/geometry_functions

Add tests and better constructors for LineSegment
author Jonatan Werpers <jonatan@werpers.com>
date Wed, 12 Feb 2025 15:40:19 +0100
parents 478b233999c5
children 7f4a5146c84c
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)
478b233999c5 Add tests and better constructors for Line
Jonatan Werpers <jonatan@werpers.com>
parents: 1916
diff changeset
9 S = length(p)
478b233999c5 Add tests and better constructors for Line
Jonatan Werpers <jonatan@werpers.com>
parents: 1916
diff changeset
10 T = promote_type(eltype(p), eltype(t))
478b233999c5 Add tests and better constructors for Line
Jonatan Werpers <jonatan@werpers.com>
parents: 1916
diff changeset
11
478b233999c5 Add tests and better constructors for Line
Jonatan Werpers <jonatan@werpers.com>
parents: 1916
diff changeset
12 PT = SVector{S,T}
478b233999c5 Add tests and better constructors for Line
Jonatan Werpers <jonatan@werpers.com>
parents: 1916
diff changeset
13 return Line{PT}(
478b233999c5 Add tests and better constructors for Line
Jonatan Werpers <jonatan@werpers.com>
parents: 1916
diff changeset
14 convert(PT, p),
478b233999c5 Add tests and better constructors for Line
Jonatan Werpers <jonatan@werpers.com>
parents: 1916
diff changeset
15 convert(PT, t),
478b233999c5 Add tests and better constructors for Line
Jonatan Werpers <jonatan@werpers.com>
parents: 1916
diff changeset
16 )
478b233999c5 Add tests and better constructors for Line
Jonatan Werpers <jonatan@werpers.com>
parents: 1916
diff changeset
17 end
478b233999c5 Add tests and better constructors for Line
Jonatan Werpers <jonatan@werpers.com>
parents: 1916
diff changeset
18
478b233999c5 Add tests and better constructors for Line
Jonatan Werpers <jonatan@werpers.com>
parents: 1916
diff changeset
19 function Line(p::Tuple, t::Tuple)
478b233999c5 Add tests and better constructors for Line
Jonatan Werpers <jonatan@werpers.com>
parents: 1916
diff changeset
20 p = promote(p...)
478b233999c5 Add tests and better constructors for Line
Jonatan Werpers <jonatan@werpers.com>
parents: 1916
diff changeset
21 t = promote(t...)
478b233999c5 Add tests and better constructors for Line
Jonatan Werpers <jonatan@werpers.com>
parents: 1916
diff changeset
22
478b233999c5 Add tests and better constructors for Line
Jonatan Werpers <jonatan@werpers.com>
parents: 1916
diff changeset
23 return Line(SVector(p), SVector(t))
1915
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
24 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
25
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26 (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
27
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
28
1916
6859089b361e Remove abstract types for Curve and surface
Jonatan Werpers <jonatan@werpers.com>
parents: 1915
diff changeset
29 struct LineSegment{PT}
1915
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
30 a::PT
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
31 b::PT
1967
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
32
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
33 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
34 end
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
35
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
36 function LineSegment(a, b)
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
37 S = length(a)
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
38 T = promote_type(eltype(a), eltype(b))
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
39
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
40 PT = SVector{S,T}
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
41 return LineSegment{PT}(
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
42 convert(PT, a),
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
43 convert(PT, b),
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
44 )
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
45 end
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
46
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
47 function LineSegment(a::Tuple, b::Tuple)
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
48 a = promote(a...)
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
49 b = promote(b...)
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
50
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
51 return LineSegment(SVector(a), SVector(b))
1915
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
52 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
53
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
54 (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
55
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
56
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
57 function linesegments(ps...)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
58 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
59 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
60
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
61
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
62 function polygon_edges(ps...)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
63 n = length(ps)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
64 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
65 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
66
1916
6859089b361e Remove abstract types for Curve and surface
Jonatan Werpers <jonatan@werpers.com>
parents: 1915
diff changeset
67 struct Circle{T,PT}
1915
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
68 c::PT
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
69 r::T
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
70 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
71
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
72 function (C::Circle)(θ)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
73 (;c, r) = C
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
74 c + r*@SVector[cos(θ), sin(θ)]
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
75 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
76
1916
6859089b361e Remove abstract types for Curve and surface
Jonatan Werpers <jonatan@werpers.com>
parents: 1915
diff changeset
77 struct TransfiniteInterpolationSurface{T1,T2,T3,T4}
1915
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
78 c₁::T1
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
79 c₂::T2
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
80 c₃::T3
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
81 c₄::T4
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
82 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
83
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
84 function (s::TransfiniteInterpolationSurface)(u,v)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
85 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
86 P₀₀ = c₁(0)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
87 P₁₀ = c₂(0)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
88 P₁₁ = c₃(0)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
89 P₀₁ = c₄(0)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
90 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
91 (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
92 )
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
93 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
94
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
95 function (s::TransfiniteInterpolationSurface)(ξ̄::AbstractArray)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
96 s(ξ̄...)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
97 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
98
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
99 # TODO: Implement jacobian() for the different mapping helpers