initial commit
This commit is contained in:
		
							
								
								
									
										47
									
								
								build.zig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								build.zig
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
				
			|||||||
 | 
					const std = @import("std");
 | 
				
			||||||
 | 
					const rlz = @import("raylib-zig");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub fn build(b: *std.Build) !void {
 | 
				
			||||||
 | 
					    const target = b.standardTargetOptions(.{});
 | 
				
			||||||
 | 
					    const optimize = b.standardOptimizeOption(.{});
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    const raylib_dep = b.dependency("raylib-zig", .{
 | 
				
			||||||
 | 
					        .target = target,
 | 
				
			||||||
 | 
					        .optimize = optimize,
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const raylib = raylib_dep.module("raylib");
 | 
				
			||||||
 | 
					    const raylib_artifact = raylib_dep.artifact("raylib");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //web exports are completely separate
 | 
				
			||||||
 | 
					    if (target.query.os_tag == .emscripten) {
 | 
				
			||||||
 | 
					        const exe_lib = try rlz.emcc.compileForEmscripten(b, "integral-display-calculation", "src/main.zig", target, optimize);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        exe_lib.linkLibrary(raylib_artifact);
 | 
				
			||||||
 | 
					        exe_lib.root_module.addImport("raylib", raylib);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Note that raylib itself is not actually added to the exe_lib output file, so it also needs to be linked with emscripten.
 | 
				
			||||||
 | 
					        const link_step = try rlz.emcc.linkWithEmscripten(b, &[_]*std.Build.Step.Compile{ exe_lib, raylib_artifact });
 | 
				
			||||||
 | 
					        //this lets your program access files like "resources/my-image.png":
 | 
				
			||||||
 | 
					        link_step.addArg("--embed-file");
 | 
				
			||||||
 | 
					        link_step.addArg("resources/");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        b.getInstallStep().dependOn(&link_step.step);
 | 
				
			||||||
 | 
					        const run_step = try rlz.emcc.emscriptenRunStep(b);
 | 
				
			||||||
 | 
					        run_step.step.dependOn(&link_step.step);
 | 
				
			||||||
 | 
					        const run_option = b.step("run", "Run integral-display-calculation");
 | 
				
			||||||
 | 
					        run_option.dependOn(&run_step.step);
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const exe = b.addExecutable(.{ .name = "integral-display-calculation", .root_source_file = b.path("src/main.zig"), .optimize = optimize, .target = target });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    exe.linkLibrary(raylib_artifact);
 | 
				
			||||||
 | 
					    exe.root_module.addImport("raylib", raylib);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const run_cmd = b.addRunArtifact(exe);
 | 
				
			||||||
 | 
					    const run_step = b.step("run", "Run integral-display-calculation");
 | 
				
			||||||
 | 
					    run_step.dependOn(&run_cmd.step);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    b.installArtifact(exe);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										11
									
								
								build.zig.zon
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								build.zig.zon
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					.{
 | 
				
			||||||
 | 
					    .name = "integral-display-calculation",
 | 
				
			||||||
 | 
					    .version = "0.0.1",
 | 
				
			||||||
 | 
					    .dependencies = .{
 | 
				
			||||||
 | 
					        .@"raylib-zig" = .{
 | 
				
			||||||
 | 
					            .url = "git+https://github.com/Not-Nik/raylib-zig?ref=devel#5004bb2316fc34a416644f3910c8c79dd08d7c63",
 | 
				
			||||||
 | 
					            .hash = "1220223e9881fc9510eeb30fc2ee73fb49ee645bf1859cc46a92b649d35ecfd3351a",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    .paths = .{""},
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										69
									
								
								src/main.zig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								src/main.zig
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,69 @@
 | 
				
			|||||||
 | 
					const rl = @import("raylib");
 | 
				
			||||||
 | 
					const std = @import("std");
 | 
				
			||||||
 | 
					const math = @import("math.zig");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const SCREENWIDTH = 1920;
 | 
				
			||||||
 | 
					const SCREENHEIGHT = 1080;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub fn main() !void {
 | 
				
			||||||
 | 
					    rl.setConfigFlags(.{ .msaa_4x_hint = true });
 | 
				
			||||||
 | 
					    rl.initWindow(SCREENWIDTH, SCREENHEIGHT, "Koordinatni sistem");
 | 
				
			||||||
 | 
					    defer rl.closeWindow();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    rl.setTargetFPS(60);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    while (!rl.windowShouldClose()) {
 | 
				
			||||||
 | 
					        rl.beginDrawing();
 | 
				
			||||||
 | 
					        defer rl.endDrawing();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        rl.clearBackground(rl.Color.white);
 | 
				
			||||||
 | 
					        drawAxis();
 | 
				
			||||||
 | 
					        // markAxis();
 | 
				
			||||||
 | 
					        plotGraph(0.01);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn drawAxis() void {
 | 
				
			||||||
 | 
					    const endy_on_abscis: i32 = @divTrunc(SCREENHEIGHT, 2);
 | 
				
			||||||
 | 
					    const endx_on_ordinat: i32 = @divTrunc(SCREENWIDTH, 2);
 | 
				
			||||||
 | 
					    // x
 | 
				
			||||||
 | 
					    rl.drawLine(0, endy_on_abscis, SCREENWIDTH, endy_on_abscis, rl.Color.black);
 | 
				
			||||||
 | 
					    // y
 | 
				
			||||||
 | 
					    rl.drawLine(endx_on_ordinat, 0, endx_on_ordinat, SCREENHEIGHT, rl.Color.black);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// todo in the future we will do calculations only once and just repeat displaying
 | 
				
			||||||
 | 
					fn plotGraph(diff: f32) void {
 | 
				
			||||||
 | 
					    // diff is currently 0.01
 | 
				
			||||||
 | 
					    const thickness = 2.5;
 | 
				
			||||||
 | 
					    var x_value: f32 = -SCREENWIDTH / 2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    while (x_value <= SCREENWIDTH) : (x_value += diff) {
 | 
				
			||||||
 | 
					        const cur_pos = adjustForGridSystem(rl.Vector2{
 | 
				
			||||||
 | 
					            .x = x_value,
 | 
				
			||||||
 | 
					            .y = getY(x_value),
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const next_pos = adjustForGridSystem(rl.Vector2{
 | 
				
			||||||
 | 
					            .x = x_value + diff,
 | 
				
			||||||
 | 
					            .y = getY(x_value + diff),
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        rl.drawLineEx(cur_pos, next_pos, thickness, rl.Color.dark_blue);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn getY(x: f32) f32 {
 | 
				
			||||||
 | 
					    const a = math.abs(x) - 2;
 | 
				
			||||||
 | 
					    const b = 1;
 | 
				
			||||||
 | 
					    return @divTrunc(a, b);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn adjustForGridSystem(input_vector: rl.Vector2) rl.Vector2 {
 | 
				
			||||||
 | 
					    const new_vector = rl.Vector2{
 | 
				
			||||||
 | 
					        .x = input_vector.x + SCREENWIDTH / 2,
 | 
				
			||||||
 | 
					        .y = -input_vector.y + SCREENHEIGHT / 2,
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return new_vector;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										27
									
								
								src/math.zig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/math.zig
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					pub fn abs(a: f32) f32 {
 | 
				
			||||||
 | 
					    if (a < 0) {
 | 
				
			||||||
 | 
					        return -a;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return a;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub fn pow(a: f32, b: i32) f32 {
 | 
				
			||||||
 | 
					    var res: f32 = 1.0;
 | 
				
			||||||
 | 
					    var n: usize = undefined;
 | 
				
			||||||
 | 
					    var f: f32 = undefined;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (b < 0) {
 | 
				
			||||||
 | 
					        f = 1 / a;
 | 
				
			||||||
 | 
					        n = @intCast(-b);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        f = a;
 | 
				
			||||||
 | 
					        n = @intCast(b);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (0..n) |_| {
 | 
				
			||||||
 | 
					        res *= f;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return res;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user