Mercurial > repos > public > sbplib_julia
annotate src/Grids/geometry.jl @ 2011:d0b6c63c506e feature/grids/geometry_functions
Add Arc type for representing partial circles
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Wed, 07 May 2025 08:38:35 +0200 |
parents | 730c9848ad0b |
children | 4617e4b74b82 |
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 |
1978 | 8 """ |
9 Line(p,t) | |
10 | |
11 A line, as a callable object, starting at `p` with tangent `t`. | |
12 | |
13 # Example | |
14 ```julia-repl | |
15 julia> l = Grids.Line([1,1],[2,1]) | |
16 Diffinitive.Grids.Line{StaticArraysCore.SVector{2, Int64}}([1, 1], [2, 1]) | |
17 | |
18 julia> l(0) | |
19 2-element StaticArraysCore.SVector{2, Int64} with indices SOneTo(2): | |
20 1 | |
21 1 | |
22 | |
23 julia> l(1) | |
24 2-element StaticArraysCore.SVector{2, Int64} with indices SOneTo(2): | |
25 3 | |
26 2 | |
27 ``` | |
28 | |
29 See also: [`LineSegment`](@ref). | |
30 """ | |
1966
478b233999c5
Add tests and better constructors for Line
Jonatan Werpers <jonatan@werpers.com>
parents:
1916
diff
changeset
|
31 function Line(p, t) |
1970
deeb61325320
Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1969
diff
changeset
|
32 p = SVector{length(p)}(p) |
deeb61325320
Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1969
diff
changeset
|
33 t = SVector{length(t)}(t) |
deeb61325320
Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1969
diff
changeset
|
34 p, t = promote(p, t) |
1966
478b233999c5
Add tests and better constructors for Line
Jonatan Werpers <jonatan@werpers.com>
parents:
1916
diff
changeset
|
35 |
1970
deeb61325320
Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1969
diff
changeset
|
36 return Line{typeof(p)}(p,t) |
1915
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
37 end |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
38 |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
39 (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
|
40 |
1974
3ed7ca1f60c4
Implement Grids.jacobian for Line
Jonatan Werpers <jonatan@werpers.com>
parents:
1973
diff
changeset
|
41 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
|
42 |
1916
6859089b361e
Remove abstract types for Curve and surface
Jonatan Werpers <jonatan@werpers.com>
parents:
1915
diff
changeset
|
43 struct LineSegment{PT} |
1915
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
44 a::PT |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
45 b::PT |
1967
669361a8195a
Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1966
diff
changeset
|
46 |
669361a8195a
Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1966
diff
changeset
|
47 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
|
48 end |
669361a8195a
Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1966
diff
changeset
|
49 |
1978 | 50 """ |
51 LineSegment(a,b) | |
52 | |
53 A line segment, as a callable object, from `a` to `b`. | |
54 | |
55 # Example | |
56 ```julia-repl | |
57 julia> l = Grids.LineSegment([1,1],[2,1]) | |
58 Diffinitive.Grids.LineSegment{StaticArraysCore.SVector{2, Int64}}([1, 1], [2, 1]) | |
59 | |
60 julia> l(0) | |
61 2-element StaticArraysCore.SVector{2, Int64} with indices SOneTo(2): | |
62 1 | |
63 1 | |
64 | |
65 julia> l(0.5) | |
66 2-element StaticArraysCore.SVector{2, Float64} with indices SOneTo(2): | |
67 1.5 | |
68 1.0 | |
69 | |
70 julia> l(1) | |
71 2-element StaticArraysCore.SVector{2, Int64} with indices SOneTo(2): | |
72 2 | |
73 1 | |
74 ``` | |
75 | |
76 See also: [`Line`](@ref). | |
77 """ | |
1967
669361a8195a
Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1966
diff
changeset
|
78 function LineSegment(a, b) |
1970
deeb61325320
Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1969
diff
changeset
|
79 a = SVector{length(a)}(a) |
deeb61325320
Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1969
diff
changeset
|
80 b = SVector{length(b)}(b) |
deeb61325320
Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1969
diff
changeset
|
81 a, b = promote(a, b) |
1967
669361a8195a
Add tests and better constructors for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1966
diff
changeset
|
82 |
1970
deeb61325320
Simplify constructors for Line and LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1969
diff
changeset
|
83 return LineSegment{typeof(a)}(a,b) |
1915
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
84 end |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
85 |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
86 (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
|
87 |
1975
79adad4a15d6
Implement Grids.jacobian for LineSegment
Jonatan Werpers <jonatan@werpers.com>
parents:
1974
diff
changeset
|
88 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
|
89 |
1978 | 90 """ |
91 linesegments(ps...) | |
92 | |
93 An array of line segments between the points `ps[1]`, `ps[2]`, and so on. | |
94 | |
95 See also: [`polygon_edges`](@ref). | |
96 """ | |
1915
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
97 function linesegments(ps...) |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
98 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
|
99 end |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
100 |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
101 |
1978 | 102 """ |
103 polygon_edges(ps...) | |
104 | |
105 An array of line segments between the points `ps[1]`, `ps[2]`, and so on | |
106 including the segment between `ps[end]` and `ps[1]`. | |
107 | |
108 See also: [`linesegments`](@ref). | |
109 """ | |
1915
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
110 function polygon_edges(ps...) |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
111 n = length(ps) |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
112 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
|
113 end |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
114 |
1969
7f4a5146c84c
Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents:
1967
diff
changeset
|
115 struct Circle{PT,T} |
1915
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
116 c::PT |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
117 r::T |
1969
7f4a5146c84c
Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents:
1967
diff
changeset
|
118 |
7f4a5146c84c
Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents:
1967
diff
changeset
|
119 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
|
120 end |
7f4a5146c84c
Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents:
1967
diff
changeset
|
121 |
1978 | 122 """ |
123 Circle(c,r) | |
124 | |
125 A circle with center `c` and radius `r` paramatrized with the angle to the x-axis. | |
126 | |
127 # Example | |
128 ```julia-repl | |
129 julia> c = Grids.Circle([1,1], 2) | |
130 Diffinitive.Grids.Circle{StaticArraysCore.SVector{2, Int64}, Int64}([1, 1], 2) | |
131 | |
132 julia> c(0) | |
133 2-element StaticArraysCore.SVector{2, Float64} with indices SOneTo(2): | |
134 3.0 | |
135 1.0 | |
136 | |
137 julia> c(π/2) | |
138 2-element StaticArraysCore.SVector{2, Float64} with indices SOneTo(2): | |
139 1.0000000000000002 | |
140 3.0 | |
141 ``` | |
142 """ | |
1969
7f4a5146c84c
Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents:
1967
diff
changeset
|
143 function Circle(c,r) |
7f4a5146c84c
Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents:
1967
diff
changeset
|
144 c = SVector{2}(c) |
7f4a5146c84c
Add tests and better constructor for Circle
Jonatan Werpers <jonatan@werpers.com>
parents:
1967
diff
changeset
|
145 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
|
146 end |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
147 |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
148 function (C::Circle)(θ) |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
149 (;c, r) = C |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
150 c + r*@SVector[cos(θ), sin(θ)] |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
151 end |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
152 |
1976
34a7e3919e9a
Implement Grids.jacobian for Circle
Jonatan Werpers <jonatan@werpers.com>
parents:
1975
diff
changeset
|
153 function Grids.jacobian(C::Circle, θ) |
34a7e3919e9a
Implement Grids.jacobian for Circle
Jonatan Werpers <jonatan@werpers.com>
parents:
1975
diff
changeset
|
154 (;r) = C |
34a7e3919e9a
Implement Grids.jacobian for Circle
Jonatan Werpers <jonatan@werpers.com>
parents:
1975
diff
changeset
|
155 r*@SVector[-sin(θ), cos(θ)] |
34a7e3919e9a
Implement Grids.jacobian for Circle
Jonatan Werpers <jonatan@werpers.com>
parents:
1975
diff
changeset
|
156 end |
34a7e3919e9a
Implement Grids.jacobian for Circle
Jonatan Werpers <jonatan@werpers.com>
parents:
1975
diff
changeset
|
157 |
2011
d0b6c63c506e
Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents:
1983
diff
changeset
|
158 struct Arc{PT,T} |
d0b6c63c506e
Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents:
1983
diff
changeset
|
159 c::Circle{PT,T} |
d0b6c63c506e
Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents:
1983
diff
changeset
|
160 θ₀::T |
d0b6c63c506e
Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents:
1983
diff
changeset
|
161 θ₁::T |
d0b6c63c506e
Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents:
1983
diff
changeset
|
162 end |
d0b6c63c506e
Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents:
1983
diff
changeset
|
163 |
d0b6c63c506e
Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents:
1983
diff
changeset
|
164 """ |
d0b6c63c506e
Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents:
1983
diff
changeset
|
165 Arc(C::Circle, θ₀, θ₁) |
d0b6c63c506e
Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents:
1983
diff
changeset
|
166 |
d0b6c63c506e
Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents:
1983
diff
changeset
|
167 # TODO |
d0b6c63c506e
Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents:
1983
diff
changeset
|
168 """ |
d0b6c63c506e
Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents:
1983
diff
changeset
|
169 function Arc(C, θ₀, θ₁) |
d0b6c63c506e
Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents:
1983
diff
changeset
|
170 r, θ₀, θ₁ = promote(C.r, θ₀, θ₁) |
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 return Arc(Circle(C.c, r), θ₀, θ₁) |
d0b6c63c506e
Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents:
1983
diff
changeset
|
173 end |
d0b6c63c506e
Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents:
1983
diff
changeset
|
174 |
d0b6c63c506e
Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents:
1983
diff
changeset
|
175 function (A::Arc)(t) |
d0b6c63c506e
Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents:
1983
diff
changeset
|
176 (; θ₀, θ₁) = A |
d0b6c63c506e
Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents:
1983
diff
changeset
|
177 return A.c((1-t)*θ₀ + t*θ₁) |
d0b6c63c506e
Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents:
1983
diff
changeset
|
178 end |
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 function Grids.jacobian(a::Arc, t) |
d0b6c63c506e
Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents:
1983
diff
changeset
|
181 return nothing |
d0b6c63c506e
Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents:
1983
diff
changeset
|
182 end |
d0b6c63c506e
Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents:
1983
diff
changeset
|
183 |
1978 | 184 """ |
185 TransfiniteInterpolationSurface(c₁, c₂, c₃, c₄) | |
186 | |
187 A surface defined by the transfinite interpolation of the curves `c₁`, `c₂`, `c₃`, and `c₄`. | |
188 """ | |
1916
6859089b361e
Remove abstract types for Curve and surface
Jonatan Werpers <jonatan@werpers.com>
parents:
1915
diff
changeset
|
189 struct TransfiniteInterpolationSurface{T1,T2,T3,T4} |
1915
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
190 c₁::T1 |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
191 c₂::T2 |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
192 c₃::T3 |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
193 c₄::T4 |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
194 end |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
195 |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
196 function (s::TransfiniteInterpolationSurface)(u,v) |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
197 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
|
198 P₀₀ = c₁(0) |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
199 P₁₀ = c₂(0) |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
200 P₁₁ = c₃(0) |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
201 P₀₁ = c₄(0) |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
202 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
|
203 (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
|
204 ) |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
205 end |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
206 |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
207 function (s::TransfiniteInterpolationSurface)(ξ̄::AbstractArray) |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
208 s(ξ̄...) |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
209 end |
c003685d9926
Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
210 |
1978 | 211 """ |
212 check_transfiniteinterpolation(s::TransfiniteInterpolationSurface) | |
213 | |
214 Throw an error if the ends of the curves in the transfinite interpolation do not match. | |
215 """ | |
1973
8e9575b518a1
Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents:
1971
diff
changeset
|
216 function check_transfiniteinterpolation(s::TransfiniteInterpolationSurface) |
8e9575b518a1
Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents:
1971
diff
changeset
|
217 if check_transfiniteinterpolation(Bool, s) |
8e9575b518a1
Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents:
1971
diff
changeset
|
218 return nothing |
8e9575b518a1
Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents:
1971
diff
changeset
|
219 else |
1982
486b3c6f919e
Throw better error type for transfinite interpolation check
Jonatan Werpers <jonatan@werpers.com>
parents:
1979
diff
changeset
|
220 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
|
221 end |
8e9575b518a1
Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents:
1971
diff
changeset
|
222 end |
8e9575b518a1
Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents:
1971
diff
changeset
|
223 |
1978 | 224 """ |
1983
730c9848ad0b
Update docstring for check_transfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents:
1982
diff
changeset
|
225 check_transfiniteinterpolation(Bool, s::TransfiniteInterpolationSurface) |
1978 | 226 |
227 Return true if the ends of the curves in the transfinite interpolation match. | |
228 """ | |
1973
8e9575b518a1
Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents:
1971
diff
changeset
|
229 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
|
230 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
|
231 return false |
8e9575b518a1
Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents:
1971
diff
changeset
|
232 end |
8e9575b518a1
Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents:
1971
diff
changeset
|
233 |
8e9575b518a1
Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents:
1971
diff
changeset
|
234 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
|
235 return false |
8e9575b518a1
Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents:
1971
diff
changeset
|
236 end |
8e9575b518a1
Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents:
1971
diff
changeset
|
237 |
8e9575b518a1
Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents:
1971
diff
changeset
|
238 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
|
239 return false |
8e9575b518a1
Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents:
1971
diff
changeset
|
240 end |
8e9575b518a1
Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents:
1971
diff
changeset
|
241 |
8e9575b518a1
Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents:
1971
diff
changeset
|
242 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
|
243 return false |
8e9575b518a1
Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents:
1971
diff
changeset
|
244 end |
8e9575b518a1
Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents:
1971
diff
changeset
|
245 |
8e9575b518a1
Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents:
1971
diff
changeset
|
246 return true |
8e9575b518a1
Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents:
1971
diff
changeset
|
247 end |
8e9575b518a1
Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents:
1971
diff
changeset
|
248 |
1977
270675bb97be
Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents:
1976
diff
changeset
|
249 function Grids.jacobian(s::TransfiniteInterpolationSurface, ξ̄) |
270675bb97be
Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents:
1976
diff
changeset
|
250 u, v = ξ̄ |
270675bb97be
Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents:
1976
diff
changeset
|
251 |
270675bb97be
Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents:
1976
diff
changeset
|
252 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
|
253 P₀₀ = c₁(0) |
270675bb97be
Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents:
1976
diff
changeset
|
254 P₁₀ = c₂(0) |
270675bb97be
Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents:
1976
diff
changeset
|
255 P₁₁ = c₃(0) |
270675bb97be
Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents:
1976
diff
changeset
|
256 P₀₁ = c₄(0) |
270675bb97be
Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents:
1976
diff
changeset
|
257 |
270675bb97be
Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents:
1976
diff
changeset
|
258 ∂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
|
259 -(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
|
260 ) |
270675bb97be
Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents:
1976
diff
changeset
|
261 |
270675bb97be
Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents:
1976
diff
changeset
|
262 ∂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
|
263 -(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
|
264 ) |
270675bb97be
Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents:
1976
diff
changeset
|
265 |
270675bb97be
Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents:
1976
diff
changeset
|
266 return [∂x̄∂ξ₁ ∂x̄∂ξ₂] |
270675bb97be
Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents:
1976
diff
changeset
|
267 end |