annotate src/Grids/geometry.jl @ 2056:00b274a118e0 feature/grids/geometry_functions tip

Add review comments
author Vidar Stiernström <vidar.stiernstrom@gmail.com>
date Thu, 12 Feb 2026 14:04:22 +0100
parents 6478c29effce
children
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
2056
00b274a118e0 Add review comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents: 2014
diff changeset
8
00b274a118e0 Add review comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents: 2014
diff changeset
9 # REVIEW:
00b274a118e0 Add review comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents: 2014
diff changeset
10 # 1. Explain the parametrization, i.e., l(1) = p + s*t
00b274a118e0 Add review comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents: 2014
diff changeset
11 # 2. Now, if p and t are ints, l(1) returns an int
00b274a118e0 Add review comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents: 2014
diff changeset
12 # while l(0.5) returns a float. Is this intended/desirable?
1978
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
13 """
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
14 Line(p,t)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
15
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
16 A line, as a callable object, starting at `p` with tangent `t`.
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
17
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
18 # Example
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
19 ```julia-repl
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
20 julia> l = Grids.Line([1,1],[2,1])
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
21 Diffinitive.Grids.Line{StaticArraysCore.SVector{2, Int64}}([1, 1], [2, 1])
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
22
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
23 julia> l(0)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
24 2-element StaticArraysCore.SVector{2, Int64} with indices SOneTo(2):
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
25 1
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
26 1
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
27
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
28 julia> l(1)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
29 2-element StaticArraysCore.SVector{2, Int64} with indices SOneTo(2):
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
30 3
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
31 2
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
32 ```
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
33
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
34 See also: [`LineSegment`](@ref).
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
35 """
1966
478b233999c5 Add tests and better constructors for Line
Jonatan Werpers <jonatan@werpers.com>
parents: 1916
diff changeset
36 function Line(p, t)
1970
deeb61325320 Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1969
diff changeset
37 p = SVector{length(p)}(p)
deeb61325320 Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1969
diff changeset
38 t = SVector{length(t)}(t)
deeb61325320 Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1969
diff changeset
39 p, t = promote(p, t)
1966
478b233999c5 Add tests and better constructors for Line
Jonatan Werpers <jonatan@werpers.com>
parents: 1916
diff changeset
40
1970
deeb61325320 Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1969
diff changeset
41 return Line{typeof(p)}(p,t)
1915
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
42 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
43
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
44 (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
45
1974
3ed7ca1f60c4 Implement Grids.jacobian for Line
Jonatan Werpers <jonatan@werpers.com>
parents: 1973
diff changeset
46 Grids.jacobian(l::Line, t) = l.tangent
1915
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
47
1916
6859089b361e Remove abstract types for Curve and surface
Jonatan Werpers <jonatan@werpers.com>
parents: 1915
diff changeset
48 struct LineSegment{PT}
1915
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
49 a::PT
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
50 b::PT
1967
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
51
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
52 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
53 end
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
54
2056
00b274a118e0 Add review comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents: 2014
diff changeset
55
00b274a118e0 Add review comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents: 2014
diff changeset
56 # REVIEW:
00b274a118e0 Add review comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents: 2014
diff changeset
57 # 1. Explain the parametrization.
00b274a118e0 Add review comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents: 2014
diff changeset
58 # 2. Now, if a and b are ints, l(1) returns an int
00b274a118e0 Add review comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents: 2014
diff changeset
59 # while l(0.5) returns a float. Is this intended/desirable?
00b274a118e0 Add review comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents: 2014
diff changeset
60 # 3. Do we want s in [0, 1]? Currently the line segment
00b274a118e0 Add review comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents: 2014
diff changeset
61 # can return values "outside" of the interval [a,b].
1978
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
62 """
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
63 LineSegment(a,b)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
64
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
65 A line segment, as a callable object, from `a` to `b`.
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
66
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
67 # Example
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
68 ```julia-repl
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
69 julia> l = Grids.LineSegment([1,1],[2,1])
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
70 Diffinitive.Grids.LineSegment{StaticArraysCore.SVector{2, Int64}}([1, 1], [2, 1])
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
71
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
72 julia> l(0)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
73 2-element StaticArraysCore.SVector{2, Int64} with indices SOneTo(2):
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
74 1
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
75 1
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
76
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
77 julia> l(0.5)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
78 2-element StaticArraysCore.SVector{2, Float64} with indices SOneTo(2):
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
79 1.5
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
80 1.0
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
81
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
82 julia> l(1)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
83 2-element StaticArraysCore.SVector{2, Int64} with indices SOneTo(2):
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
84 2
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
85 1
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
86 ```
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
87
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
88 See also: [`Line`](@ref).
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
89 """
1967
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
90 function LineSegment(a, b)
1970
deeb61325320 Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1969
diff changeset
91 a = SVector{length(a)}(a)
deeb61325320 Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1969
diff changeset
92 b = SVector{length(b)}(b)
deeb61325320 Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1969
diff changeset
93 a, b = promote(a, b)
1967
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
94
1970
deeb61325320 Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1969
diff changeset
95 return LineSegment{typeof(a)}(a,b)
1915
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
96 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
97
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
98 (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
99
1975
79adad4a15d6 Implement Grids.jacobian for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1974
diff changeset
100 Grids.jacobian(c::LineSegment, s) = c.b - c.a
1915
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
101
2056
00b274a118e0 Add review comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents: 2014
diff changeset
102
1978
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
103 """
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
104 linesegments(ps...)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
105
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
106 An array of line segments between the points `ps[1]`, `ps[2]`, and so on.
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
107
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
108 See also: [`polygon_edges`](@ref).
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
109 """
1915
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
110 function linesegments(ps...)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
111 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
112 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
113
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
114
1978
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
115 """
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
116 polygon_edges(ps...)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
117
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
118 An array of line segments between the points `ps[1]`, `ps[2]`, and so on
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
119 including the segment between `ps[end]` and `ps[1]`.
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
120
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
121 See also: [`linesegments`](@ref).
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
122 """
1915
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
123 function polygon_edges(ps...)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
124 n = length(ps)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
125 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
126 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
127
2056
00b274a118e0 Add review comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents: 2014
diff changeset
128
1969
7f4a5146c84c Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 1967
diff changeset
129 struct Circle{PT,T}
1915
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
130 c::PT
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
131 r::T
1969
7f4a5146c84c Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 1967
diff changeset
132
7f4a5146c84c Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 1967
diff changeset
133 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
134 end
7f4a5146c84c Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 1967
diff changeset
135
1978
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
136 """
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
137 Circle(c,r)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
138
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
139 A circle with center `c` and radius `r` paramatrized with the angle to the x-axis.
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
140
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
141 # Example
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
142 ```julia-repl
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
143 julia> c = Grids.Circle([1,1], 2)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
144 Diffinitive.Grids.Circle{StaticArraysCore.SVector{2, Int64}, Int64}([1, 1], 2)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
145
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
146 julia> c(0)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
147 2-element StaticArraysCore.SVector{2, Float64} with indices SOneTo(2):
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
148 3.0
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
149 1.0
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
150
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
151 julia> c(π/2)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
152 2-element StaticArraysCore.SVector{2, Float64} with indices SOneTo(2):
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
153 1.0000000000000002
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
154 3.0
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
155 ```
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
156 """
1969
7f4a5146c84c Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 1967
diff changeset
157 function Circle(c,r)
7f4a5146c84c Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 1967
diff changeset
158 c = SVector{2}(c)
7f4a5146c84c Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 1967
diff changeset
159 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
160 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
161
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
162 function (C::Circle)(θ)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
163 (;c, r) = C
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
164 c + r*@SVector[cos(θ), sin(θ)]
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
165 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
166
1976
34a7e3919e9a Implement Grids.jacobian for Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 1975
diff changeset
167 function Grids.jacobian(C::Circle, θ)
34a7e3919e9a Implement Grids.jacobian for Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 1975
diff changeset
168 (;r) = C
34a7e3919e9a Implement Grids.jacobian for Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 1975
diff changeset
169 r*@SVector[-sin(θ), cos(θ)]
34a7e3919e9a Implement Grids.jacobian for Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 1975
diff changeset
170 end
34a7e3919e9a Implement Grids.jacobian for Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 1975
diff changeset
171
2056
00b274a118e0 Add review comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents: 2014
diff changeset
172
2011
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
173 struct Arc{PT,T}
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
174 c::Circle{PT,T}
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
175 θ₀::T
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
176 θ₁::T
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
177 end
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
178
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
179 """
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
180 Arc(C::Circle, θ₀, θ₁)
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
181
2014
6478c29effce Add docstring for Arc and arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2013
diff changeset
182 A circular arc as a callable object. The arc is around the circle `C` between
6478c29effce Add docstring for Arc and arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2013
diff changeset
183 angles `θ₀` and `θ₁` and is paramatrized between 0 and 1.
6478c29effce Add docstring for Arc and arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2013
diff changeset
184
6478c29effce Add docstring for Arc and arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2013
diff changeset
185 See also: [`arc`](@ref), [`Circle`](@ref).
2011
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
186 """
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
187 function Arc(C, θ₀, θ₁)
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
188 r, θ₀, θ₁ = promote(C.r, θ₀, θ₁)
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
189
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
190 return Arc(Circle(C.c, r), θ₀, θ₁)
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
191 end
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
192
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
193 function (A::Arc)(t)
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
194 (; θ₀, θ₁) = A
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
195 return A.c((1-t)*θ₀ + t*θ₁)
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
196 end
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
197
2013
7895b509f9bf Implement Grids.jacobian for Arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2012
diff changeset
198 function Grids.jacobian(A::Arc, t)
7895b509f9bf Implement Grids.jacobian for Arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2012
diff changeset
199 (;c, θ₀, θ₁) = A
7895b509f9bf Implement Grids.jacobian for Arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2012
diff changeset
200 return (θ₁-θ₀)*jacobian(c, t)
2011
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
201 end
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
202
2012
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
203
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
204 """
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
205 arc(a,b,r)
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
206
2014
6478c29effce Add docstring for Arc and arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2013
diff changeset
207 A circular arc between the points `a` and `b` with radius `abs(r)`. If `r > 0`
6478c29effce Add docstring for Arc and arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2013
diff changeset
208 the arc goes counter clockwise and if `r<0` the arc goes clockwise. The arc is
6478c29effce Add docstring for Arc and arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2013
diff changeset
209 parametrized such that if `A = arc(a,b,r)` then `A(0)` corresponds to `a` and
6478c29effce Add docstring for Arc and arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2013
diff changeset
210 `A(1)` to `b`.
6478c29effce Add docstring for Arc and arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2013
diff changeset
211
6478c29effce Add docstring for Arc and arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2013
diff changeset
212 See also: [`Arc`](@ref), [`Circle`](@ref).
2012
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
213 """
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
214 function arc(a,b,r)
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
215 if abs(r) < norm(b-a)/2
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
216 throw(DomainError(r, "arc was called with radius r = $r smaller than half the distance between the points."))
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
217 end
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
218
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
219 R̂ = @SMatrix[0 -1; 1 0]
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
220
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
221 α = sign(r)*√(r^2 - norm((b-a)/2)^2)
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
222 t̂ = R̂*(b-a)/norm(b-a)
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
223
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
224 c = (a+b)/2 + α*t̂
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
225
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
226 ca = a-c
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
227 cb = b-c
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
228 θₐ = atan(ca[2],ca[1])
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
229 θᵦ = atan(cb[2],cb[1])
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
230
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
231 Δθ = mod(θᵦ-θₐ+π, 2π)-π # Δθ in the interval (-π,π)
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
232
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
233 if r > 0
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
234 Δθ = abs(Δθ)
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
235 else
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
236 Δθ = -abs(Δθ)
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
237 end
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
238
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
239 return Arc(Circle(c,abs(r)), θₐ, θₐ+Δθ)
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
240 end
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
241
2056
00b274a118e0 Add review comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents: 2014
diff changeset
242 # REVIEW:
00b274a118e0 Add review comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents: 2014
diff changeset
243 # 1. Explain parametrisation
00b274a118e0 Add review comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents: 2014
diff changeset
244 # 2. Boundscheck for the parametrisation argumetns, i.e. within [0,1]?
1978
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
245 """
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
246 TransfiniteInterpolationSurface(c₁, c₂, c₃, c₄)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
247
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
248 A surface defined by the transfinite interpolation of the curves `c₁`, `c₂`, `c₃`, and `c₄`.
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
249 """
1916
6859089b361e Remove abstract types for Curve and surface
Jonatan Werpers <jonatan@werpers.com>
parents: 1915
diff changeset
250 struct TransfiniteInterpolationSurface{T1,T2,T3,T4}
1915
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
251 c₁::T1
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
252 c₂::T2
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
253 c₃::T3
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
254 c₄::T4
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
255 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
256
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
257 function (s::TransfiniteInterpolationSurface)(u,v)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
258 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
259 P₀₀ = c₁(0)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
260 P₁₀ = c₂(0)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
261 P₁₁ = c₃(0)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
262 P₀₁ = c₄(0)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
263 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
264 (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
265 )
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
266 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
267
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
268 function (s::TransfiniteInterpolationSurface)(ξ̄::AbstractArray)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
269 s(ξ̄...)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
270 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
271
1978
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
272 """
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
273 check_transfiniteinterpolation(s::TransfiniteInterpolationSurface)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
274
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
275 Throw an error if the ends of the curves in the transfinite interpolation do not match.
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
276 """
1973
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
277 function check_transfiniteinterpolation(s::TransfiniteInterpolationSurface)
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
278 if check_transfiniteinterpolation(Bool, s)
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
279 return nothing
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
280 else
1982
486b3c6f919e Throw better error type for transfinite interpolation check
Jonatan Werpers <jonatan@werpers.com>
parents: 1979
diff changeset
281 throw(ArgumentError("The end of each curve in the transfinite interpolation should be the same as the beginning of the next curve."))
1973
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
282 end
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
283 end
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
284
1978
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
285 """
1983
730c9848ad0b Update docstring for check_transfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1982
diff changeset
286 check_transfiniteinterpolation(Bool, s::TransfiniteInterpolationSurface)
1978
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
287
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
288 Return true if the ends of the curves in the transfinite interpolation match.
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
289 """
1973
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
290 function check_transfiniteinterpolation(::Type{Bool}, s::TransfiniteInterpolationSurface)
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
291 if !isapprox(s.c₁(1), s.c₂(0))
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
292 return false
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
293 end
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
294
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
295 if !isapprox(s.c₂(1), s.c₃(0))
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
296 return false
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
297 end
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
298
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
299 if !isapprox(s.c₃(1), s.c₄(0))
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
300 return false
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
301 end
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
302
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
303 if !isapprox(s.c₄(1), s.c₁(0))
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
304 return false
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
305 end
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
306
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
307 return true
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
308 end
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
309
1977
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
310 function Grids.jacobian(s::TransfiniteInterpolationSurface, ξ̄)
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
311 u, v = ξ̄
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
312
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
313 c₁, c₂, c₃, c₄ = s.c₁, s.c₂, s.c₃, s.c₄
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
314 P₀₀ = c₁(0)
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
315 P₁₀ = c₂(0)
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
316 P₁₁ = c₃(0)
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
317 P₀₁ = c₄(0)
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
318
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
319 ∂x̄∂ξ₁ = (1-v)*jacobian(c₁,u) + c₂(v) - v*jacobian(c₃,1-u) -c₄(1-v) - (
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
320 -(1-v)*P₀₀ + (1-v)*P₁₀ + v*P₁₁ - v*P₀₁
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
321 )
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
322
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
323 ∂x̄∂ξ₂ = -c₁(u) + u*jacobian(c₂,v) + c₃(1-u) - (1-u)*jacobian(c₄,1-v) - (
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
324 -(1-u)*P₀₀ - u*P₁₀ + u*P₁₁ + (1-u)*P₀₁
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
325 )
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
326
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
327 return [∂x̄∂ξ₁ ∂x̄∂ξ₂]
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
328 end