annotate src/Grids/geometry.jl @ 2073:bc09d0bfac65 feature/grids/geometry_functions tip

Remove resolved review comment
author Jonatan Werpers <jonatan@werpers.com>
date Tue, 17 Feb 2026 20:40:53 +0100
parents c36812de3f2d
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
1978
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
9 """
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
10 Line(p,t)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
11
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
12 A line, as a callable object, starting at `p` with tangent `t`.
2070
c68fa6c74477 Explain parametrizations in docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 2069
diff changeset
13 The parametrization is ``l(s) = p + st``.
1978
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
14
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
15 # Example
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
16 ```julia-repl
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
17 julia> l = Grids.Line([1,1],[2,1])
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
18 Diffinitive.Grids.Line{StaticArraysCore.SVector{2, Int64}}([1, 1], [2, 1])
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
19
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
20 julia> l(0)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
21 2-element StaticArraysCore.SVector{2, Int64} with indices SOneTo(2):
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
22 1
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
23 1
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
24
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
25 julia> l(1)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
26 2-element StaticArraysCore.SVector{2, Int64} with indices SOneTo(2):
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
27 3
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
28 2
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
29 ```
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
30
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
31 See also: [`LineSegment`](@ref).
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
32 """
1966
478b233999c5 Add tests and better constructors for Line
Jonatan Werpers <jonatan@werpers.com>
parents: 1916
diff changeset
33 function Line(p, t)
1970
deeb61325320 Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1969
diff changeset
34 p = SVector{length(p)}(p)
deeb61325320 Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1969
diff changeset
35 t = SVector{length(t)}(t)
deeb61325320 Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1969
diff changeset
36 p, t = promote(p, t)
1966
478b233999c5 Add tests and better constructors for Line
Jonatan Werpers <jonatan@werpers.com>
parents: 1916
diff changeset
37
1970
deeb61325320 Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1969
diff changeset
38 return Line{typeof(p)}(p,t)
1915
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 (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
42
1974
3ed7ca1f60c4 Implement Grids.jacobian for Line
Jonatan Werpers <jonatan@werpers.com>
parents: 1973
diff changeset
43 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
44
1916
6859089b361e Remove abstract types for Curve and surface
Jonatan Werpers <jonatan@werpers.com>
parents: 1915
diff changeset
45 struct LineSegment{PT}
1915
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
46 a::PT
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
47 b::PT
1967
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
48
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
49 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
50 end
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
51
2056
00b274a118e0 Add review comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents: 2014
diff changeset
52
1978
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
53 """
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
54 LineSegment(a,b)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
55
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
56 A line segment, as a callable object, from `a` to `b`.
2071
9e9c56f5a656 Add parameter validation when calling a transfinite interpolation object
Jonatan Werpers <jonatan@werpers.com>
parents: 2070
diff changeset
57 The parametrization is ``l(s) = (1-s)a + s*b`` where ``s∈(0,1)``.
1978
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
58
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
59 # Example
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
60 ```julia-repl
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
61 julia> l = Grids.LineSegment([1,1],[2,1])
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
62 Diffinitive.Grids.LineSegment{StaticArraysCore.SVector{2, Int64}}([1, 1], [2, 1])
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
63
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
64 julia> l(0)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
65 2-element StaticArraysCore.SVector{2, Int64} with indices SOneTo(2):
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
66 1
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
67 1
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
68
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
69 julia> l(0.5)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
70 2-element StaticArraysCore.SVector{2, Float64} with indices SOneTo(2):
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
71 1.5
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
72 1.0
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
73
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
74 julia> l(1)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
75 2-element StaticArraysCore.SVector{2, Int64} with indices SOneTo(2):
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
76 2
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
77 1
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
78 ```
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
79
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
80 See also: [`Line`](@ref).
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
81 """
1967
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
82 function LineSegment(a, b)
1970
deeb61325320 Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1969
diff changeset
83 a = SVector{length(a)}(a)
deeb61325320 Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1969
diff changeset
84 b = SVector{length(b)}(b)
deeb61325320 Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1969
diff changeset
85 a, b = promote(a, b)
1967
669361a8195a Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1966
diff changeset
86
1970
deeb61325320 Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1969
diff changeset
87 return LineSegment{typeof(a)}(a,b)
1915
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
88 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
89
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
90 (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
91
1975
79adad4a15d6 Implement Grids.jacobian for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents: 1974
diff changeset
92 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
93
2056
00b274a118e0 Add review comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents: 2014
diff changeset
94
1978
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
95 """
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
96 linesegments(ps...)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
97
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
98 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
99
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
100 See also: [`polygon_edges`](@ref).
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
101 """
1915
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
102 function linesegments(ps...)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
103 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
104 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
105
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
106
1978
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 polygon_edges(ps...)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
109
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
110 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
111 including the segment between `ps[end]` and `ps[1]`.
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
112
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
113 See also: [`linesegments`](@ref).
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
114 """
1915
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
115 function polygon_edges(ps...)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
116 n = length(ps)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
117 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
118 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
119
2056
00b274a118e0 Add review comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents: 2014
diff changeset
120
1969
7f4a5146c84c Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 1967
diff changeset
121 struct Circle{PT,T}
1915
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
122 c::PT
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
123 r::T
1969
7f4a5146c84c Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 1967
diff changeset
124
7f4a5146c84c Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 1967
diff changeset
125 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
126 end
7f4a5146c84c Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 1967
diff changeset
127
1978
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
128 """
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
129 Circle(c,r)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
130
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
131 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
132
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
133 # Example
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
134 ```julia-repl
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
135 julia> c = Grids.Circle([1,1], 2)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
136 Diffinitive.Grids.Circle{StaticArraysCore.SVector{2, Int64}, Int64}([1, 1], 2)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
137
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
138 julia> c(0)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
139 2-element StaticArraysCore.SVector{2, Float64} with indices SOneTo(2):
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
140 3.0
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
141 1.0
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
142
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
143 julia> c(π/2)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
144 2-element StaticArraysCore.SVector{2, Float64} with indices SOneTo(2):
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
145 1.0000000000000002
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
146 3.0
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
147 ```
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
148 """
1969
7f4a5146c84c Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 1967
diff changeset
149 function Circle(c,r)
7f4a5146c84c Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 1967
diff changeset
150 c = SVector{2}(c)
7f4a5146c84c Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 1967
diff changeset
151 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
152 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
153
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
154 function (C::Circle)(θ)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
155 (;c, r) = C
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
156 c + r*@SVector[cos(θ), sin(θ)]
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
157 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
158
1976
34a7e3919e9a Implement Grids.jacobian for Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 1975
diff changeset
159 function Grids.jacobian(C::Circle, θ)
34a7e3919e9a Implement Grids.jacobian for Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 1975
diff changeset
160 (;r) = C
34a7e3919e9a Implement Grids.jacobian for Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 1975
diff changeset
161 r*@SVector[-sin(θ), cos(θ)]
34a7e3919e9a Implement Grids.jacobian for Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 1975
diff changeset
162 end
34a7e3919e9a Implement Grids.jacobian for Circle
Jonatan Werpers <jonatan@werpers.com>
parents: 1975
diff changeset
163
2056
00b274a118e0 Add review comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents: 2014
diff changeset
164
2011
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
165 struct Arc{PT,T}
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
166 c::Circle{PT,T}
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
167 θ₀::T
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
168 θ₁::T
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
169 end
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
170
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
171 """
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
172 Arc(C::Circle, θ₀, θ₁)
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
173
2014
6478c29effce Add docstring for Arc and arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2013
diff changeset
174 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
175 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
176
6478c29effce Add docstring for Arc and arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2013
diff changeset
177 See also: [`arc`](@ref), [`Circle`](@ref).
2011
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 function Arc(C, θ₀, θ₁)
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
180 r, θ₀, θ₁ = promote(C.r, θ₀, θ₁)
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
181
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
182 return Arc(Circle(C.c, r), θ₀, θ₁)
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
183 end
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
184
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
185 function (A::Arc)(t)
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
186 (; θ₀, θ₁) = A
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
187 return A.c((1-t)*θ₀ + t*θ₁)
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
188 end
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
189
2013
7895b509f9bf Implement Grids.jacobian for Arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2012
diff changeset
190 function Grids.jacobian(A::Arc, t)
7895b509f9bf Implement Grids.jacobian for Arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2012
diff changeset
191 (;c, θ₀, θ₁) = A
7895b509f9bf Implement Grids.jacobian for Arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2012
diff changeset
192 return (θ₁-θ₀)*jacobian(c, t)
2011
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
193 end
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
194
2012
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
195
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
196 """
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
197 arc(a,b,r)
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
198
2014
6478c29effce Add docstring for Arc and arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2013
diff changeset
199 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
200 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
201 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
202 `A(1)` to `b`.
6478c29effce Add docstring for Arc and arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2013
diff changeset
203
6478c29effce Add docstring for Arc and arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2013
diff changeset
204 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
205 """
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
206 function arc(a,b,r)
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
207 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
208 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
209 end
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
210
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
211 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
212
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
213 α = 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
214 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
215
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
216 c = (a+b)/2 + α*t̂
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
217
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
218 ca = a-c
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
219 cb = b-c
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
220 θₐ = atan(ca[2],ca[1])
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
221 θᵦ = atan(cb[2],cb[1])
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
222
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
223 Δθ = mod(θᵦ-θₐ+π, 2π)-π # Δθ in the interval (-π,π)
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
224
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
225 if r > 0
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
226 Δθ = abs(Δθ)
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
227 else
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
228 Δθ = -abs(Δθ)
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
229 end
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 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
232 end
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
233
1978
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
234 """
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
235 TransfiniteInterpolationSurface(c₁, c₂, c₃, c₄)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
236
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
237 A surface defined by the transfinite interpolation of the curves `c₁`, `c₂`, `c₃`, and `c₄`.
2070
c68fa6c74477 Explain parametrizations in docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 2069
diff changeset
238 The transfinite interpolation maps the unit square ([0,1]⊗[0,1]) to the patch delimited by the given curves.
c68fa6c74477 Explain parametrizations in docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 2069
diff changeset
239 The curves should encircle the patch counterclockwise.
c68fa6c74477 Explain parametrizations in docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 2069
diff changeset
240
c68fa6c74477 Explain parametrizations in docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 2069
diff changeset
241 See https://en.wikipedia.org/wiki/Transfinite_interpolation for more information on transfinite interpolation.
1978
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
242 """
1916
6859089b361e Remove abstract types for Curve and surface
Jonatan Werpers <jonatan@werpers.com>
parents: 1915
diff changeset
243 struct TransfiniteInterpolationSurface{T1,T2,T3,T4}
1915
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
244 c₁::T1
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
245 c₂::T2
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
246 c₃::T3
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
247 c₄::T4
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
248 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
249
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
250 function (s::TransfiniteInterpolationSurface)(u,v)
2071
9e9c56f5a656 Add parameter validation when calling a transfinite interpolation object
Jonatan Werpers <jonatan@werpers.com>
parents: 2070
diff changeset
251 if (u,v) ∉ unitsquare()
9e9c56f5a656 Add parameter validation when calling a transfinite interpolation object
Jonatan Werpers <jonatan@werpers.com>
parents: 2070
diff changeset
252 throw(DomainError((u,v), "Transfinite interpolation was called with parameters outside the unit square."))
9e9c56f5a656 Add parameter validation when calling a transfinite interpolation object
Jonatan Werpers <jonatan@werpers.com>
parents: 2070
diff changeset
253 end
1915
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
254 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
255 P₀₀ = c₁(0)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
256 P₁₀ = c₂(0)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
257 P₁₁ = c₃(0)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
258 P₀₁ = c₄(0)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
259 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
260 (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
261 )
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
262 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
263
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
264 function (s::TransfiniteInterpolationSurface)(ξ̄::AbstractArray)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
265 s(ξ̄...)
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
1978
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
268 """
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
269 check_transfiniteinterpolation(s::TransfiniteInterpolationSurface)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
270
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
271 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
272 """
1973
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
273 function check_transfiniteinterpolation(s::TransfiniteInterpolationSurface)
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
274 if check_transfiniteinterpolation(Bool, s)
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
275 return nothing
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
276 else
1982
486b3c6f919e Throw better error type for transfinite interpolation check
Jonatan Werpers <jonatan@werpers.com>
parents: 1979
diff changeset
277 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
278 end
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
279 end
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
280
1978
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
281 """
1983
730c9848ad0b Update docstring for check_transfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1982
diff changeset
282 check_transfiniteinterpolation(Bool, s::TransfiniteInterpolationSurface)
1978
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
283
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
284 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
285 """
1973
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
286 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
287 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
288 return false
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
289 end
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
290
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 return true
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
304 end
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
305
1977
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
306 function Grids.jacobian(s::TransfiniteInterpolationSurface, ξ̄)
2072
c36812de3f2d Add parameter validation when evaluating jacobian for transfinite interpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 2071
diff changeset
307 if ξ̄ ∉ unitsquare()
c36812de3f2d Add parameter validation when evaluating jacobian for transfinite interpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 2071
diff changeset
308 throw(DomainError(ξ̄, "Transfinite interpolation was called with parameters outside the unit square."))
c36812de3f2d Add parameter validation when evaluating jacobian for transfinite interpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 2071
diff changeset
309 end
1977
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
310 u, v = ξ̄
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
311
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
312 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
313 P₀₀ = c₁(0)
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
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
318 ∂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
319 -(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
320 )
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 ∂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
323 -(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
324 )
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 return [∂x̄∂ξ₁ ∂x̄∂ξ₂]
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
327 end