Skip to content

Commit f74e180

Browse files
committed
Merge branch 'ForceDescriptor<NodeID>'
2 parents 5435b7b + 4a69b54 commit f74e180

File tree

4 files changed

+13
-18
lines changed

4 files changed

+13
-18
lines changed

Examples/ForceDirectedGraphExample/ForceDirectedGraphExample/MermaidVisualization.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ struct MermaidVisualization: View {
100100

101101
} force: {
102102
.manyBody()
103-
.link(originalLength: 70.0)
103+
.link(originalLength: 50.0)
104104
.center()
105105
} emittingNewNodesWithStates: { id in
106106
KineticState(position: getInitialPosition(id: id, r: 100))

Examples/ForceDirectedGraphExample/ForceDirectedGraphExample/MyRing.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,11 @@ struct MyRing: View {
5151
} force: {
5252
.manyBody(strength: -15)
5353
.link(
54-
originalLength: 20.0,
55-
stiffness: .weightedByDegree { _, _ in 3.0}
54+
originalLength: 30.0,
55+
stiffness: .weightedByDegree { _, _ in 1.0 }
5656
)
5757
.center()
58-
.collide()
58+
// .collide()
5959
}
6060
.graphOverlay { proxy in
6161
Rectangle().fill(.clear).contentShape(Rectangle())

Sources/ForceSimulation/Forces/LinkForce.swift

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import Darwin
2+
13
extension Kinetics {
24

35
public enum LinkStiffness {
@@ -15,12 +17,12 @@ extension Kinetics {
1517
case .weightedByDegree(let k):
1618
return link.map { l in
1719
k(l, lookup)
18-
/ Vector.Scalar(
20+
/ (Vector.Scalar(
1921
min(
2022
lookup.count[l.source, default: 0],
2123
lookup.count[l.target, default: 0]
2224
)
23-
)
25+
)+1)
2426
}
2527
}
2628
}
@@ -81,18 +83,14 @@ extension Kinetics {
8183
assert(b != 0)
8284

8385
var vec =
84-
(positionBufferPointer[t] + velocityBufferPointer[t]
85-
- positionBufferPointer[s] - velocityBufferPointer[s])
86-
// .jiggled()
86+
(positionBufferPointer[t] - positionBufferPointer[s])
8787
.jiggled(by: &kinetics.randomGenerator)
8888

8989
var l = vec.length()
9090

91-
l =
92-
(l - self.calculatedLength[i]) / l * kinetics.alpha
93-
* self.calculatedStiffness[i]
91+
l = (l - self.calculatedLength[i]) / l * self.calculatedStiffness[i] * kinetics.velocityDecay * kinetics.alpha
9492

95-
vec *= l
93+
vec *= l // * kinetics.velocityDecay
9694

9795
// same as d3
9896
velocityBufferPointer[t] -= vec * b
@@ -101,7 +99,6 @@ extension Kinetics {
10199
}
102100
}
103101

104-
105102
@usableFromInline
106103
internal var links: [EdgeID<Int>]! = nil
107104

@@ -144,7 +141,6 @@ extension Kinetics {
144141

145142
}
146143

147-
148144
@inlinable
149145
public func dispose() {}
150146
}
@@ -173,7 +169,6 @@ public struct LinkLookup<NodeID: Hashable> {
173169

174170
}
175171

176-
177172
extension Kinetics.LinkStiffness: Equatable {
178173
@inlinable
179174
public static func == (lhs: Kinetics.LinkStiffness, rhs: Kinetics.LinkStiffness) -> Bool {
@@ -196,4 +191,4 @@ extension Kinetics.LinkLength: Equatable {
196191
return false
197192
}
198193
}
199-
}
194+
}

Sources/ForceSimulation/Simulation.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ where Vector: SimulatableVector & L2NormCalculatable, ForceField: ForceProtocol<
6363
forceField: consuming ForceField,
6464
initialAlpha: Vector.Scalar = 1,
6565
alphaMin: Vector.Scalar = 1e-3,
66-
alphaDecay: Vector.Scalar = 2e-3,
66+
alphaDecay: Vector.Scalar = 1e-2,
6767
alphaTarget: Vector.Scalar = 0.0,
6868
velocityDecay: Vector.Scalar = 0.6,
6969
position: [Vector]? = nil,

0 commit comments

Comments
 (0)