annotate src/Grids/geometry.jl @ 2014:6478c29effce feature/grids/geometry_functions

Add docstring for Arc and arc
author Jonatan Werpers <jonatan@werpers.com>
date Fri, 09 May 2025 07:42:21 +0200
parents 7895b509f9bf
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
1978
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
8 """
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
9 Line(p,t)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
10
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
11 A line, as a callable object, starting at `p` with tangent `t`.
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
12
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
13 # Example
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
14 ```julia-repl
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
15 julia> l = Grids.Line([1,1],[2,1])
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
16 Diffinitive.Grids.Line{StaticArraysCore.SVector{2, Int64}}([1, 1], [2, 1])
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 julia> l(0)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
19 2-element StaticArraysCore.SVector{2, Int64} with indices SOneTo(2):
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
20 1
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
21 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(1)
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 3
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
26 2
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
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
29 See also: [`LineSegment`](@ref).
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
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
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
50 """
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
51 LineSegment(a,b)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
52
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
53 A line segment, as a callable object, from `a` to `b`.
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
54
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
55 # Example
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
56 ```julia-repl
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
57 julia> l = Grids.LineSegment([1,1],[2,1])
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
58 Diffinitive.Grids.LineSegment{StaticArraysCore.SVector{2, Int64}}([1, 1], [2, 1])
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
59
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
60 julia> l(0)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
61 2-element StaticArraysCore.SVector{2, Int64} with indices SOneTo(2):
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
62 1
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
63 1
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 julia> l(0.5)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
66 2-element StaticArraysCore.SVector{2, Float64} with indices SOneTo(2):
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
67 1.5
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
68 1.0
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
69
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
70 julia> l(1)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
71 2-element StaticArraysCore.SVector{2, Int64} with indices SOneTo(2):
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
72 2
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
73 1
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
74 ```
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
75
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
76 See also: [`Line`](@ref).
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
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
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
90 """
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
91 linesegments(ps...)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
92
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
93 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
94
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
95 See also: [`polygon_edges`](@ref).
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
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
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
102 """
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
103 polygon_edges(ps...)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
104
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
105 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
106 including the segment between `ps[end]` and `ps[1]`.
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: [`linesegments`](@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 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
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
122 """
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
123 Circle(c,r)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
124
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
125 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
126
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
127 # Example
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
128 ```julia-repl
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
129 julia> c = Grids.Circle([1,1], 2)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
130 Diffinitive.Grids.Circle{StaticArraysCore.SVector{2, Int64}, Int64}([1, 1], 2)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
131
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
132 julia> c(0)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
133 2-element StaticArraysCore.SVector{2, Float64} with indices SOneTo(2):
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
134 3.0
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
135 1.0
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 julia> c(π/2)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
138 2-element StaticArraysCore.SVector{2, Float64} with indices SOneTo(2):
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
139 1.0000000000000002
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 ```
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
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
2014
6478c29effce Add docstring for Arc and arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2013
diff changeset
167 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
168 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
169
6478c29effce Add docstring for Arc and arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2013
diff changeset
170 See also: [`arc`](@ref), [`Circle`](@ref).
2011
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 function Arc(C, θ₀, θ₁)
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
173 r, θ₀, θ₁ = promote(C.r, θ₀, θ₁)
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 return Arc(Circle(C.c, r), θ₀, θ₁)
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
176 end
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
177
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
178 function (A::Arc)(t)
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
179 (; θ₀, θ₁) = A
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
180 return A.c((1-t)*θ₀ + t*θ₁)
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
181 end
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
182
2013
7895b509f9bf Implement Grids.jacobian for Arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2012
diff changeset
183 function Grids.jacobian(A::Arc, t)
7895b509f9bf Implement Grids.jacobian for Arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2012
diff changeset
184 (;c, θ₀, θ₁) = A
7895b509f9bf Implement Grids.jacobian for Arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2012
diff changeset
185 return (θ₁-θ₀)*jacobian(c, t)
2011
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
186 end
d0b6c63c506e Add Arc type for representing partial circles
Jonatan Werpers <jonatan@werpers.com>
parents: 1983
diff changeset
187
2012
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
188
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
189 """
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
190 arc(a,b,r)
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
191
2014
6478c29effce Add docstring for Arc and arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2013
diff changeset
192 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
193 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
194 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
195 `A(1)` to `b`.
6478c29effce Add docstring for Arc and arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2013
diff changeset
196
6478c29effce Add docstring for Arc and arc
Jonatan Werpers <jonatan@werpers.com>
parents: 2013
diff changeset
197 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
198 """
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
199 function arc(a,b,r)
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
200 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
201 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
202 end
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 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
205
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
206 α = 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
207 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
208
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
209 c = (a+b)/2 + α*t̂
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 ca = a-c
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
212 cb = b-c
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
213 θₐ = atan(ca[2],ca[1])
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
214 θᵦ = atan(cb[2],cb[1])
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 Δθ = mod(θᵦ-θₐ+π, 2π)-π # Δθ in the interval (-π,π)
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 if r > 0
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
219 Δθ = abs(Δθ)
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
220 else
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
221 Δθ = -abs(Δθ)
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
222 end
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 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
225 end
4617e4b74b82 Add arc() for constructing circle arcs between two points
Jonatan Werpers <jonatan@werpers.com>
parents: 2011
diff changeset
226
1978
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
227 """
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
228 TransfiniteInterpolationSurface(c₁, c₂, c₃, c₄)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
229
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
230 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
231 """
1916
6859089b361e Remove abstract types for Curve and surface
Jonatan Werpers <jonatan@werpers.com>
parents: 1915
diff changeset
232 struct TransfiniteInterpolationSurface{T1,T2,T3,T4}
1915
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
233 c₁::T1
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
234 c₂::T2
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
235 c₃::T3
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
236 c₄::T4
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
237 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
238
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
239 function (s::TransfiniteInterpolationSurface)(u,v)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
240 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
241 P₀₀ = c₁(0)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
242 P₁₀ = c₂(0)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
243 P₁₁ = c₃(0)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
244 P₀₁ = c₄(0)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
245 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
246 (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
247 )
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)(ξ̄::AbstractArray)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
251 s(ξ̄...)
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
252 end
c003685d9926 Add geometry functions removed from feature/grids/manifolds
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
253
1978
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
254 """
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
255 check_transfiniteinterpolation(s::TransfiniteInterpolationSurface)
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
256
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
257 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
258 """
1973
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
259 function check_transfiniteinterpolation(s::TransfiniteInterpolationSurface)
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
260 if check_transfiniteinterpolation(Bool, s)
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
261 return nothing
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
262 else
1982
486b3c6f919e Throw better error type for transfinite interpolation check
Jonatan Werpers <jonatan@werpers.com>
parents: 1979
diff changeset
263 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
264 end
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
265 end
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
266
1978
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
267 """
1983
730c9848ad0b Update docstring for check_transfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1982
diff changeset
268 check_transfiniteinterpolation(Bool, s::TransfiniteInterpolationSurface)
1978
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
269
d7a5129517d9 Add docstrings
Jonatan Werpers <jonatan@werpers.com>
parents: 1977
diff changeset
270 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
271 """
1973
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
272 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
273 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
274 return false
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
275 end
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
276
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
277 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
278 return false
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
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
281 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
282 return false
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
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
285 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
286 return false
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
287 end
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
288
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
289 return true
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
290 end
8e9575b518a1 Add tests for TransfiniteInterpolationSurface and implemnet check_tranfiniteinterpolation
Jonatan Werpers <jonatan@werpers.com>
parents: 1971
diff changeset
291
1977
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
292 function Grids.jacobian(s::TransfiniteInterpolationSurface, ξ̄)
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
293 u, v = ξ̄
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
294
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
295 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
296 P₀₀ = c₁(0)
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
297 P₁₀ = c₂(0)
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
298 P₁₁ = c₃(0)
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
299 P₀₁ = c₄(0)
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
300
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
301 ∂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
302 -(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
303 )
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
304
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
305 ∂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
306 -(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
307 )
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
308
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
309 return [∂x̄∂ξ₁ ∂x̄∂ξ₂]
270675bb97be Implement Grids.jacobian for TransfiniteInterpolationSurface
Jonatan Werpers <jonatan@werpers.com>
parents: 1976
diff changeset
310 end