@@ -113,22 +113,40 @@ end
113
113
114
114
for op in (:* ,:+ ,:- )
115
115
@eval begin
116
- $ op (c:: Number ,d:: Segment ) = Segment ($ op (c,leftendpoint (d)),$ op (c,rightendpoint (d)))
117
- $ op (d:: Segment ,c:: Number ) = Segment ($ op (leftendpoint (d),c),$ op (rightendpoint (d),c))
116
+ $ op (c:: Number ,d:: Segment ) = broadcast ($ op,c,d)
117
+ $ op (d:: Segment ,c:: Number ) = broadcast ($ op,d,c)
118
+ broadcasted (:: typeof ($ op), c:: Number , d:: Segment ) = Segment ($ op (c,leftendpoint (d)),$ op (c,rightendpoint (d)))
119
+ broadcasted (:: typeof ($ op), d:: Segment , c:: Number ) = Segment ($ op (leftendpoint (d),c),$ op (rightendpoint (d),c))
118
120
end
119
121
end
120
122
121
- broadcast (:: typeof (^ ),c:: Number ,d:: Segment ) = Segment (c^ leftendpoint (d),c^ rightendpoint (d))
122
- broadcast (:: typeof (^ ),d:: Segment ,c:: Number ) = Segment (leftendpoint (d)^ c,rightendpoint (d)^ c)
123
+ broadcasted (:: typeof (^ ),c:: Number ,d:: Segment ) = Segment (c^ leftendpoint (d),c^ rightendpoint (d))
124
+ function broadcasted (:: typeof (^ ),d:: Segment ,c:: Number )
125
+ a,b = endpoints (d)
126
+ if a < 0 < b
127
+ Segment (0 , b^ c)
128
+ elseif b < 0 < a
129
+ Segment (a^ c, 0 )
130
+ else
131
+ Segment (a^ c,b^ c)
132
+ end
133
+ end
123
134
124
- / (d:: Segment ,c:: Number ) = Segment (leftendpoint (d)/ c,rightendpoint (d)/ c)
135
+ broadcasted (:: typeof (Base. literal_pow), :: typeof (^ ), d:: Segment , :: Val{K} ) where K =
136
+ broadcasted (^ , d, K)
125
137
138
+ / (d:: Segment ,c:: Number ) = broadcast (/ ,d,c)
139
+ broadcasted (:: typeof (/ ), d:: Segment ,c:: Number ) = Segment (leftendpoint (d)/ c,rightendpoint (d)/ c)
126
140
127
- sqrt (d:: Segment )= Segment (sqrt (leftendpoint (d)),sqrt (rightendpoint (d)))
141
+ sqrt (d:: Segment ) = broadcast (sqrt, d)
142
+ broadcasted (:: typeof (sqrt), d:: Segment )= Segment (sqrt (leftendpoint (d)),sqrt (rightendpoint (d)))
128
143
129
144
+ (d1:: Segment ,d2:: Segment )= Segment (d1. a+ d2. a,d1. b+ d2. b)
145
+ broadcasted (:: typeof (+ ),d1:: Segment ,d2:: Segment ) = Segment (d1. a+ d2. a,d1. b+ d2. b)
130
146
131
147
148
+ DomainSets. map_domain (map:: DomainSets.AbstractAffineMap , domain:: AbstractSegment ) =
149
+ Segment (map (leftendpoint (domain)),map (rightendpoint (domain)))
132
150
133
151
# # intersect/union
134
152
0 commit comments