git.iko.soy/metal-metaballs
on master help sign in
Added graph api.
a6e2aebvinivendra
PixelImage.xcodeproj/project.pbxproj+4
@@ -12,6 +12,7 @@
12 2426868D1C63B72A00D62456 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2426868B1C63B72A00D62456 /* Main.storyboard */; };
12 2426868D1C63B72A00D62456 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2426868B1C63B72A00D62456 /* Main.storyboard */; };
13 2426868F1C63B72A00D62456 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2426868E1C63B72A00D62456 /* Assets.xcassets */; };
13 2426868F1C63B72A00D62456 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2426868E1C63B72A00D62456 /* Assets.xcassets */; };
14 242686921C63B72A00D62456 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 242686901C63B72A00D62456 /* LaunchScreen.storyboard */; };
14 242686921C63B72A00D62456 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 242686901C63B72A00D62456 /* LaunchScreen.storyboard */; };
15+ 249CF84C1C6D113C008B0C78 /* Matrix.swift in Sources */ = {isa = PBXBuildFile; fileRef = 249CF84B1C6D113C008B0C78 /* Matrix.swift */; };
15 24E1E7D71C67C8B200ECF1C4 /* UIKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24E1E7D61C67C8B200ECF1C4 /* UIKit.swift */; };
16 24E1E7D71C67C8B200ECF1C4 /* UIKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24E1E7D61C67C8B200ECF1C4 /* UIKit.swift */; };
16 24E1E7E21C67D37F00ECF1C4 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 24E1E7E11C67D37F00ECF1C4 /* Metal.framework */; };
17 24E1E7E21C67D37F00ECF1C4 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 24E1E7E11C67D37F00ECF1C4 /* Metal.framework */; };
17 24E1E7E41C67D39300ECF1C4 /* MetalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 24E1E7E31C67D39300ECF1C4 /* MetalKit.framework */; };
18 24E1E7E41C67D39300ECF1C4 /* MetalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 24E1E7E31C67D39300ECF1C4 /* MetalKit.framework */; };
@@ -57,6 +58,7 @@
57 2426868E1C63B72A00D62456 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
58 2426868E1C63B72A00D62456 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
58 242686911C63B72A00D62456 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
59 242686911C63B72A00D62456 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
59 242686931C63B72A00D62456 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
60 242686931C63B72A00D62456 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
61+ 249CF84B1C6D113C008B0C78 /* Matrix.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Matrix.swift; sourceTree = "<group>"; };
60 24E1E7D61C67C8B200ECF1C4 /* UIKit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIKit.swift; sourceTree = "<group>"; };
62 24E1E7D61C67C8B200ECF1C4 /* UIKit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIKit.swift; sourceTree = "<group>"; };
61 24E1E7E11C67D37F00ECF1C4 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; };
63 24E1E7E11C67D37F00ECF1C4 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; };
62 24E1E7E31C67D39300ECF1C4 /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = System/Library/Frameworks/MetalKit.framework; sourceTree = SDKROOT; };
64 24E1E7E31C67D39300ECF1C4 /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = System/Library/Frameworks/MetalKit.framework; sourceTree = SDKROOT; };
@@ -135,6 +137,7 @@
135 24ED21CC1C6C2397009C40FC /* MetaballDataSource.swift */,
137 24ED21CC1C6C2397009C40FC /* MetaballDataSource.swift */,
136 24E1E7EA1C67D70300ECF1C4 /* MetalMetaballRenderer.swift */,
138 24E1E7EA1C67D70300ECF1C4 /* MetalMetaballRenderer.swift */,
137 24E1E7EE1C67D74300ECF1C4 /* Metal.swift */,
139 24E1E7EE1C67D74300ECF1C4 /* Metal.swift */,
140+ 249CF84B1C6D113C008B0C78 /* Matrix.swift */,
138 24E1E7EF1C67D74300ECF1C4 /* shaders.metal */,
141 24E1E7EF1C67D74300ECF1C4 /* shaders.metal */,
139 2426868B1C63B72A00D62456 /* Main.storyboard */,
142 2426868B1C63B72A00D62456 /* Main.storyboard */,
140 2426868E1C63B72A00D62456 /* Assets.xcassets */,
143 2426868E1C63B72A00D62456 /* Assets.xcassets */,
@@ -295,6 +298,7 @@
295 24FFA8711C6BA038005ACD60 /* PowerOperator.swift in Sources */,
298 24FFA8711C6BA038005ACD60 /* PowerOperator.swift in Sources */,
296 24E1E7D71C67C8B200ECF1C4 /* UIKit.swift in Sources */,
299 24E1E7D71C67C8B200ECF1C4 /* UIKit.swift in Sources */,
297 24FFA8851C6BA038005ACD60 /* Zip.swift in Sources */,
300 24FFA8851C6BA038005ACD60 /* Zip.swift in Sources */,
301+ 249CF84C1C6D113C008B0C78 /* Matrix.swift in Sources */,
298 24FFA8791C6BA038005ACD60 /* Cycle.swift in Sources */,
302 24FFA8791C6BA038005ACD60 /* Cycle.swift in Sources */,
299 24E1E7F11C67D74300ECF1C4 /* shaders.metal in Sources */,
303 24E1E7F11C67D74300ECF1C4 /* shaders.metal in Sources */,
300 24FFA86E1C6BA038005ACD60 /* Dictionary.swift in Sources */,
304 24FFA86E1C6BA038005ACD60 /* Dictionary.swift in Sources */,
PixelImage/Matrix.swiftnew file+66
@@ -0,0 +1,66 @@
1+
2+import UIKit
3+
4+class Graph<T> {
5+ var adjacencyMatrix: Matrix
6+ var vertices: [T]
7+
8+ init(vertices: [T]) {
9+ let size = vertices.count
10+
11+ self.vertices = vertices
12+ self.adjacencyMatrix = Matrix(size: size)
13+ }
14+
15+ func addEdge(i: Int, _ j: Int) {
16+ adjacencyMatrix.set(i, j)
17+ adjacencyMatrix.set(j, i)
18+ }
19+
20+ func removeEdge(i: Int, _ j: Int) {
21+ adjacencyMatrix.reset(i, j)
22+ adjacencyMatrix.reset(j, i)
23+ }
24+}
25+
26+struct Matrix: CustomStringConvertible {
27+ private var buffer: [CGFloat]
28+
29+ let size: Int
30+
31+ init(size: Int) {
32+ buffer = [CGFloat](count: size * size, repeatedValue: 0.0)
33+ self.size = size
34+ }
35+
36+ func get(i: Int, j: Int) -> CGFloat {
37+ return buffer[index(i, j)]
38+ }
39+
40+ mutating func set(i: Int, _ j: Int, value: CGFloat = 1.0) {
41+ buffer[index(i, j)] = value
42+ }
43+
44+ mutating func reset(i: Int, _ j: Int) {
45+ buffer[index(i, j)] = 0.0
46+ }
47+
48+ private func index(i: Int, _ j: Int) -> Int {
49+ return j * size + i
50+ }
51+
52+ var description: String {
53+ get {
54+ var result = ""
55+ for (index, value) in buffer.enumerate() {
56+ result = result + "\(value)"
57+ if index % size == size - 1 {
58+ result = result + "\n"
59+ } else {
60+ result = result + " "
61+ }
62+ }
63+ return result
64+ }
65+ }
66+}