From d79befe12a8d6b32a41beb88d6e75b12a75615a7 Mon Sep 17 00:00:00 2001 From: Tom Barrett Date: Wed, 30 Jun 2021 17:19:47 +0200 Subject: rotating cube --- src/matrix.zig | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/matrix.zig (limited to 'src/matrix.zig') diff --git a/src/matrix.zig b/src/matrix.zig new file mode 100644 index 0000000..eaf9685 --- /dev/null +++ b/src/matrix.zig @@ -0,0 +1,54 @@ +const std = @import("std"); +const ArrayList = std.ArrayList; + +const matrix = struct { + h: usize, + w: usize, + x: ArrayList(f32), +}; + +pub fn new(h: usize, w: usize, x: []f32) matrix { + var m = matrix{ + .h = h, + .w = w, + .x = ArrayList(f32).init(std.heap.page_allocator), + }; + + var i: usize = 0; + while (i < h * w) : (i += 1) { + if (m.x.append(x[i])) |val| {} else |err| {} + } + + return m; +} + +pub fn dot(a: []f32, b: []f32, len: usize, step: usize) f32 { + var x: f32 = 0; + var j: usize = 0; + var i: usize = len; + var k: usize = 0; + + while (i > 0) : (i -= 1) { + x += a[k] * b[j]; + k += 1; + j += step; + } + + return x; +} + +pub fn multiply(a: matrix, b: matrix) matrix { + var x = ArrayList(f32).init(std.heap.page_allocator); + var i: usize = 0; + var k: usize = 0; + + while (i < a.h) : (i += 1) { + var j: usize = 0; + while (j < b.w) : (j += 1) { + if (x.append(dot(a.x.items[k..], b.x.items[j..], a.w, b.w))) |val| {} else |err| {} + } + k += a.w; + } + + return new(a.h, b.w, x.items); +} -- cgit v1.2.3