Mercurial > repos > public > sbplib_julia
comparison src/Grids/geometry.jl @ 1970:deeb61325320 feature/grids/geometry_functions
Simplify constructors for Line and LineSegment
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Fri, 14 Feb 2025 08:28:50 +0100 |
parents | 7f4a5146c84c |
children | 9e89084cbba4 |
comparison
equal
deleted
inserted
replaced
1969:7f4a5146c84c | 1970:deeb61325320 |
---|---|
4 | 4 |
5 Line{PT}(p::PT, tangent::PT) where PT = new{PT}(p,tangent) | 5 Line{PT}(p::PT, tangent::PT) where PT = new{PT}(p,tangent) |
6 end | 6 end |
7 | 7 |
8 function Line(p, t) | 8 function Line(p, t) |
9 S = length(p) | 9 p = SVector{length(p)}(p) |
10 T = promote_type(eltype(p), eltype(t)) | 10 t = SVector{length(t)}(t) |
11 p, t = promote(p, t) | |
11 | 12 |
12 PT = SVector{S,T} | 13 return Line{typeof(p)}(p,t) |
13 return Line{PT}( | |
14 convert(PT, p), | |
15 convert(PT, t), | |
16 ) | |
17 end | |
18 | |
19 function Line(p::Tuple, t::Tuple) | |
20 p = promote(p...) | |
21 t = promote(t...) | |
22 | |
23 return Line(SVector(p), SVector(t)) | |
24 end | 14 end |
25 | 15 |
26 (c::Line)(s) = c.p + s*c.tangent | 16 (c::Line)(s) = c.p + s*c.tangent |
27 | 17 |
28 | 18 |
32 | 22 |
33 LineSegment{PT}(p::PT, tangent::PT) where PT = new{PT}(p,tangent) | 23 LineSegment{PT}(p::PT, tangent::PT) where PT = new{PT}(p,tangent) |
34 end | 24 end |
35 | 25 |
36 function LineSegment(a, b) | 26 function LineSegment(a, b) |
37 S = length(a) | 27 a = SVector{length(a)}(a) |
38 T = promote_type(eltype(a), eltype(b)) | 28 b = SVector{length(b)}(b) |
29 a, b = promote(a, b) | |
39 | 30 |
40 PT = SVector{S,T} | 31 return LineSegment{typeof(a)}(a,b) |
41 return LineSegment{PT}( | |
42 convert(PT, a), | |
43 convert(PT, b), | |
44 ) | |
45 end | |
46 | |
47 function LineSegment(a::Tuple, b::Tuple) | |
48 a = promote(a...) | |
49 b = promote(b...) | |
50 | |
51 return LineSegment(SVector(a), SVector(b)) | |
52 end | 32 end |
53 | 33 |
54 (c::LineSegment)(s) = (1-s)*c.a + s*c.b | 34 (c::LineSegment)(s) = (1-s)*c.a + s*c.b |
55 | 35 |
56 | 36 |