annotate src/Grids/geometry.jl @ 1966:478b233999c5 feature/grids/geometry_functions

Add tests and better constructors for Line
author Jonatan Werpers <jonatan@werpers.com>
date Wed, 12 Feb 2025 15:33:48 +0100
parents 6859089b361e
children 669361a8195a
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
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
1916
6859089b361e Remove abstract types for Curve and surface
Jonatan Werpers <jonatan@werpers.com>
parents: 1915
diff changeset
47 struct Circle{T,PT}
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
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
50 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
51
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
52 function (C::Circle)(θ)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
53 (;c, r) = C
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
54 c + r*@SVector[cos(θ), sin(θ)]
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
55 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
56
1916
6859089b361e Remove abstract types for Curve and surface
Jonatan Werpers <jonatan@werpers.com>
parents: 1915
diff changeset
57 struct TransfiniteInterpolationSurface{T1,T2,T3,T4}
1915
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
58 c₁::T1
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
59 c₂::T2
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
60 c₃::T3
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
61 c₄::T4
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
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
64 function (s::TransfiniteInterpolationSurface)(u,v)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
65 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
66 P₀₀ = c₁(0)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
67 P₁₀ = c₂(0)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
68 P₁₁ = c₃(0)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
69 P₀₁ = c₄(0)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
70 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
71 (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
72 )
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
73 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
74
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
75 function (s::TransfiniteInterpolationSurface)(ξ̄::AbstractArray)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
76 s(ξ̄...)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
77 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
78
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
79 # TODO: Implement jacobian() for the different mapping helpers