rename & scale implementation
This commit is contained in:
parent
2109bb5bf8
commit
71e22ebaae
@ -15,7 +15,7 @@ pub fn build(b: *std.Build) !void {
|
|||||||
|
|
||||||
//web exports are completely separate
|
//web exports are completely separate
|
||||||
if (target.query.os_tag == .emscripten) {
|
if (target.query.os_tag == .emscripten) {
|
||||||
const exe_lib = try rlz.emcc.compileForEmscripten(b, "integral-display-calculation", "src/main.zig", target, optimize);
|
const exe_lib = try rlz.emcc.compileForEmscripten(b, "koordinatni-sistem", "src/main.zig", target, optimize);
|
||||||
|
|
||||||
exe_lib.linkLibrary(raylib_artifact);
|
exe_lib.linkLibrary(raylib_artifact);
|
||||||
exe_lib.root_module.addImport("raylib", raylib);
|
exe_lib.root_module.addImport("raylib", raylib);
|
||||||
@ -29,18 +29,18 @@ pub fn build(b: *std.Build) !void {
|
|||||||
b.getInstallStep().dependOn(&link_step.step);
|
b.getInstallStep().dependOn(&link_step.step);
|
||||||
const run_step = try rlz.emcc.emscriptenRunStep(b);
|
const run_step = try rlz.emcc.emscriptenRunStep(b);
|
||||||
run_step.step.dependOn(&link_step.step);
|
run_step.step.dependOn(&link_step.step);
|
||||||
const run_option = b.step("run", "Run integral-display-calculation");
|
const run_option = b.step("run", "Run koordinatni-sistem");
|
||||||
run_option.dependOn(&run_step.step);
|
run_option.dependOn(&run_step.step);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const exe = b.addExecutable(.{ .name = "integral-display-calculation", .root_source_file = b.path("src/main.zig"), .optimize = optimize, .target = target });
|
const exe = b.addExecutable(.{ .name = "koordinatni-sistem", .root_source_file = b.path("src/main.zig"), .optimize = optimize, .target = target });
|
||||||
|
|
||||||
exe.linkLibrary(raylib_artifact);
|
exe.linkLibrary(raylib_artifact);
|
||||||
exe.root_module.addImport("raylib", raylib);
|
exe.root_module.addImport("raylib", raylib);
|
||||||
|
|
||||||
const run_cmd = b.addRunArtifact(exe);
|
const run_cmd = b.addRunArtifact(exe);
|
||||||
const run_step = b.step("run", "Run integral-display-calculation");
|
const run_step = b.step("run", "Run koordinatni-sistem");
|
||||||
run_step.dependOn(&run_cmd.step);
|
run_step.dependOn(&run_cmd.step);
|
||||||
|
|
||||||
b.installArtifact(exe);
|
b.installArtifact(exe);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
.{
|
.{
|
||||||
.name = "integral-display-calculation",
|
.name = "koordinatni-sistem",
|
||||||
.version = "0.0.1",
|
.version = "0.0.1",
|
||||||
.dependencies = .{
|
.dependencies = .{
|
||||||
.@"raylib-zig" = .{
|
.@"raylib-zig" = .{
|
||||||
|
89
src/main.zig
89
src/main.zig
@ -4,22 +4,34 @@ const math = @import("math.zig");
|
|||||||
|
|
||||||
const SCREENWIDTH = 1920;
|
const SCREENWIDTH = 1920;
|
||||||
const SCREENHEIGHT = 1080;
|
const SCREENHEIGHT = 1080;
|
||||||
|
const SCALE = 50;
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
|
// std.debug.print("{d}\n", .{SCREENWIDTH / 2});
|
||||||
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
|
defer _ = gpa.deinit();
|
||||||
|
const allocator = gpa.allocator();
|
||||||
|
|
||||||
rl.setConfigFlags(.{ .msaa_4x_hint = true });
|
rl.setConfigFlags(.{ .msaa_4x_hint = true });
|
||||||
rl.initWindow(SCREENWIDTH, SCREENHEIGHT, "Koordinatni sistem");
|
rl.initWindow(SCREENWIDTH, SCREENHEIGHT, "Koordinatni sistem");
|
||||||
defer rl.closeWindow();
|
defer rl.closeWindow();
|
||||||
|
|
||||||
rl.setTargetFPS(60);
|
rl.setTargetFPS(60);
|
||||||
|
|
||||||
|
// todo move away from being a loop, a static trigonometry should not be redrawn every frame
|
||||||
|
rl.beginDrawing();
|
||||||
|
|
||||||
|
rl.clearBackground(rl.Color.white);
|
||||||
|
|
||||||
|
try markAxis(allocator);
|
||||||
|
plotGraph();
|
||||||
|
drawAxis();
|
||||||
|
|
||||||
|
rl.endDrawing();
|
||||||
|
|
||||||
while (!rl.windowShouldClose()) {
|
while (!rl.windowShouldClose()) {
|
||||||
rl.beginDrawing();
|
rl.beginDrawing();
|
||||||
defer rl.endDrawing();
|
rl.endDrawing();
|
||||||
|
|
||||||
rl.clearBackground(rl.Color.white);
|
|
||||||
drawAxis();
|
|
||||||
// markAxis();
|
|
||||||
plotGraph(0.01);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -32,9 +44,50 @@ fn drawAxis() void {
|
|||||||
rl.drawLine(endx_on_ordinat, 0, endx_on_ordinat, SCREENHEIGHT, rl.Color.black);
|
rl.drawLine(endx_on_ordinat, 0, endx_on_ordinat, SCREENHEIGHT, rl.Color.black);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn markAxis(allocator: std.mem.Allocator) !void {
|
||||||
|
const diff = 10;
|
||||||
|
const font_size = 20;
|
||||||
|
const start_x = SCREENWIDTH / 2;
|
||||||
|
const start_y = SCREENHEIGHT / 2;
|
||||||
|
const radius = SCALE / 15;
|
||||||
|
var buf: [20]u8 = undefined;
|
||||||
|
|
||||||
|
var cnt: usize = 0;
|
||||||
|
var i: i32 = start_x;
|
||||||
|
while (i <= SCREENWIDTH) : (i += SCALE) {
|
||||||
|
// get
|
||||||
|
const text = try std.fmt.bufPrintZ(&buf, "{}", .{cnt});
|
||||||
|
cnt += 1;
|
||||||
|
// 0 is due to us working with C-style strings
|
||||||
|
var text_back = try allocator.allocSentinel(u8, text.len + 1, 0);
|
||||||
|
defer allocator.free(text_back);
|
||||||
|
@memcpy(text_back[0..1], "-");
|
||||||
|
@memcpy(text_back[1..], text);
|
||||||
|
|
||||||
|
// +x
|
||||||
|
rl.drawCircle(@intCast(i), start_y, radius, rl.Color.black);
|
||||||
|
rl.drawText(text, @as(i32, @intCast(i)) - diff / 2, start_y + diff, font_size, rl.Color.black);
|
||||||
|
|
||||||
|
if (i == start_x) continue; // prevent 0 from being written/drawn twice
|
||||||
|
|
||||||
|
// -x
|
||||||
|
rl.drawCircle(SCREENWIDTH - i, start_y, radius, rl.Color.black);
|
||||||
|
rl.drawText(text_back, SCREENWIDTH - i - diff - diff / 2, start_y + diff, font_size, rl.Color.black);
|
||||||
|
}
|
||||||
|
|
||||||
|
i = start_y;
|
||||||
|
while (i <= SCREENHEIGHT) : (i += SCALE) {
|
||||||
|
// +y
|
||||||
|
rl.drawCircle(start_x, @intCast(i), radius, rl.Color.black);
|
||||||
|
|
||||||
|
// -y
|
||||||
|
rl.drawCircle(start_x, SCREENHEIGHT - i, radius, rl.Color.black);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// todo in the future we will do calculations only once and just repeat displaying
|
// todo in the future we will do calculations only once and just repeat displaying
|
||||||
fn plotGraph(diff: f32) void {
|
fn plotGraph() void {
|
||||||
// diff is currently 0.01
|
const diff: f32 = 0.01;
|
||||||
const thickness = 2.5;
|
const thickness = 2.5;
|
||||||
var x_value: f32 = -SCREENWIDTH / 2;
|
var x_value: f32 = -SCREENWIDTH / 2;
|
||||||
|
|
||||||
@ -49,20 +102,30 @@ fn plotGraph(diff: f32) void {
|
|||||||
.y = getY(x_value + diff),
|
.y = getY(x_value + diff),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// test
|
||||||
|
if (cur_pos.x == 0 or next_pos.x == 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
rl.drawLineEx(cur_pos, next_pos, thickness, rl.Color.dark_blue);
|
rl.drawLineEx(cur_pos, next_pos, thickness, rl.Color.dark_blue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// f(x)
|
||||||
fn getY(x: f32) f32 {
|
fn getY(x: f32) f32 {
|
||||||
const a = math.abs(x) - 2;
|
const min_threshold = 1e-3;
|
||||||
const b = 1;
|
const a = x / 10;
|
||||||
return @divTrunc(a, b);
|
var b: f32 = 1.0;
|
||||||
|
if (b == 0) b = a / min_threshold;
|
||||||
|
|
||||||
|
return a / b;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn adjustForGridSystem(input_vector: rl.Vector2) rl.Vector2 {
|
fn adjustForGridSystem(input_vector: rl.Vector2) rl.Vector2 {
|
||||||
|
// std.debug.print("{d} => {d}\n", .{ input_vector.x, input_vector.x * SCALE });
|
||||||
const new_vector = rl.Vector2{
|
const new_vector = rl.Vector2{
|
||||||
.x = input_vector.x + SCREENWIDTH / 2,
|
.x = input_vector.x * SCALE + SCREENWIDTH / 2,
|
||||||
.y = -input_vector.y + SCREENHEIGHT / 2,
|
.y = -input_vector.y * SCALE + SCREENHEIGHT / 2, // minus is there because y works the opposite in gui libraries than in coordination system
|
||||||
};
|
};
|
||||||
|
|
||||||
return new_vector;
|
return new_vector;
|
||||||
|
Reference in New Issue
Block a user