@@ -41,7 +41,7 @@ struct Fortune {
41
41
case . site( let coordinate) :
42
42
handleSiteEvent ( at: coordinate)
43
43
case . circle( let coordinate, let center, let parabola) :
44
- handleCircleEvent ( at: coordinate, center: center, parabola: parabola)
44
+ handleCircleEvent ( at: coordinate, center: center, parabola: parabola. value! )
45
45
}
46
46
}
47
47
@@ -52,6 +52,7 @@ struct Fortune {
52
52
vertices = updatedValues. vertices
53
53
}
54
54
55
+ beachLine = nil
55
56
return ( self . sites, vertices, edges)
56
57
}
57
58
@@ -86,7 +87,7 @@ struct Fortune {
86
87
let newPoint = site
87
88
let oldPoint = focus
88
89
89
- var leftBreakpoint : BeachNode = BeachNode ( . breakpoint( sites: ( oldPoint, newPoint) , edge: nil ) )
90
+ let leftBreakpoint : BeachNode = BeachNode ( . breakpoint( sites: ( oldPoint, newPoint) , edge: nil ) )
90
91
let rightBreakpoint : BeachNode = BeachNode ( . breakpoint( sites: ( newPoint, oldPoint) , edge: nil ) )
91
92
92
93
let leftLeaf : BeachNode = BeachNode ( . parabola( site: oldPoint, circleEvent: nil ) )
@@ -121,7 +122,7 @@ struct Fortune {
121
122
*/
122
123
123
124
//replace node with new node
124
- parabolaAboveSite. replace ( with: & leftBreakpoint)
125
+ parabolaAboveSite. replace ( with: leftBreakpoint)
125
126
126
127
if let leftCousin = leftLeaf. predecessor ( ) {
127
128
checkCircleEvent ( leftCousin, leftLeaf, middleLeaf)
@@ -178,21 +179,18 @@ struct Fortune {
178
179
C⬆ <- newEdge1
179
180
C⬇ <- newEdge2
180
181
*/
181
- if let deleted = updates. deleted,
182
- let updated = updates. updated,
182
+ if let updated = updates. updated,
183
183
let left = updates. left,
184
184
let right = updates. right {
185
185
186
- guard let deletedBreakpointEdge = deleted. data. breakpointEdge else { return }
187
- guard let updatedBreakpointEdge = updated. data. breakpointEdge else { return }
188
186
guard let leftBreakpointEdge = left. data. breakpointEdge else { return }
189
187
guard let rightBreakpointEdge = right. data. breakpointEdge else { return }
190
188
191
189
//finalizing the old edges' origins
192
- deletedBreakpointEdge . breakpoint = nil
193
- deletedBreakpointEdge . origin = vertex
194
- updatedBreakpointEdge . breakpoint = nil
195
- updatedBreakpointEdge . origin = vertex
190
+ leftBreakpointEdge . breakpoint = nil
191
+ leftBreakpointEdge . origin = vertex
192
+ rightBreakpointEdge . breakpoint = nil
193
+ rightBreakpointEdge . origin = vertex
196
194
197
195
//creating a new edge
198
196
let leftPoint = updated. data. breakpointSites!. 0
@@ -214,8 +212,8 @@ struct Fortune {
214
212
newEdge1. setNext ( rightBreakpointEdge)
215
213
216
214
//adding incidentedges
217
- vertex. incidentEdges. append ( updatedBreakpointEdge )
218
- vertex. incidentEdges. append ( deletedBreakpointEdge )
215
+ vertex. incidentEdges. append ( leftBreakpointEdge )
216
+ vertex. incidentEdges. append ( rightBreakpointEdge )
219
217
vertex. incidentEdges. append ( newEdge2)
220
218
221
219
//update new breakpoint Edge
@@ -242,9 +240,8 @@ struct Fortune {
242
240
- Returns: The two breakpoints classified into deleted, updated, left and right.
243
241
*/
244
242
private func deleteParabola( _ parabola: BeachNode , pred: BeachNode , succ: BeachNode , sweepLine: Double ) ->
245
- ( deleted : BeachNode ? , updated: BeachNode ? , left: BeachNode ? , right: BeachNode ? ) ? {
243
+ ( updated: BeachNode ? , left: BeachNode ? , right: BeachNode ? ) ? {
246
244
247
- var deleted : BeachNode ?
248
245
var updated : BeachNode ?
249
246
var left : BeachNode ?
250
247
var right : BeachNode ?
@@ -262,37 +259,35 @@ struct Fortune {
262
259
PRED SUCC
263
260
*/
264
261
if parabola. isLeftChild ( ) { //implies parent = the breakpoint on the right
265
- guard var rightParabola = parabola. parent? . rightChild else { return nil }
266
- parabola. parent? . replace ( with: & rightParabola)
262
+ guard let rightParabola = parabola. parent? . rightChild else { return nil }
263
+ parabola. parent? . replace ( with: rightParabola)
267
264
268
265
//finding the other breakpoint
269
266
guard let leftBreakpoint = beachLine? . getBreakpointNode ( between: ( pred, parabola) , sweepLine: sweepLine) else { return nil }
270
267
guard let successorSite = succ. data. parabolaSite else { return nil }
271
268
leftBreakpoint. data. updateBreakpointSites ( right: successorSite)
272
269
273
270
//assigning to the return variables
274
- deleted = parabola. parent
275
271
updated = leftBreakpoint
276
272
left = leftBreakpoint
277
273
right = parabola. parent
278
274
279
275
} else if parabola. isRightChild ( ) { //implies parent = breakpoint on the left
280
- guard var leftParabola = parabola. parent? . leftChild else { return nil }
281
- parabola. parent? . replace ( with: & leftParabola)
276
+ guard let leftParabola = parabola. parent? . leftChild else { return nil }
277
+ parabola. parent? . replace ( with: leftParabola)
282
278
283
279
//finding the other breakpoint
284
280
guard let rightBreakpoint = beachLine? . getBreakpointNode ( between: ( parabola, succ) , sweepLine: sweepLine) else { return nil }
285
281
guard let predecessorSite = pred. data. parabolaSite else { return nil }
286
282
rightBreakpoint. data. updateBreakpointSites ( left: predecessorSite)
287
283
288
284
//assigning to the return variables
289
- deleted = parabola. parent
290
285
updated = rightBreakpoint
291
286
left = parabola. parent
292
287
right = rightBreakpoint
293
288
}
294
-
295
- return ( deleted : deleted , updated: updated, left: left, right: right)
289
+
290
+ return ( updated: updated, left: left, right: right)
296
291
}
297
292
298
293
@@ -312,7 +307,7 @@ struct Fortune {
312
307
//check counterclockwise since we are using a plane where y increases downward (clockwise if not)
313
308
//^^^ therefore this reverses with the angle calculation which uses unit circle
314
309
if !CircleGeometry. checkClockwise ( a, b, c, center: circle. center) {
315
- let circleEvent : Event = . circle( circle. eventPoint, center: circle. center, parabola: bNode)
310
+ let circleEvent : Event = . circle( circle. eventPoint, center: circle. center, parabola: Weak < BeachNode > ( bNode) )
316
311
bNode. data. parabolaCircleEvent = circleEvent
317
312
eventQueue. enqueue ( circleEvent)
318
313
}
0 commit comments