summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/estd/graphics/curve.zig4
-rw-r--r--src/screen/main.zig32
2 files changed, 23 insertions, 13 deletions
diff --git a/src/estd/graphics/curve.zig b/src/estd/graphics/curve.zig
index 70569a3..6c591fa 100644
--- a/src/estd/graphics/curve.zig
+++ b/src/estd/graphics/curve.zig
@@ -29,7 +29,7 @@ pub const Curve = struct {
const middle_y: f64 = @floatFromInt(self.middle.y);
const end_x: f64 = @floatFromInt(self.end.x);
const end_y: f64 = @floatFromInt(self.end.y);
- const resolution = 2 + (
+ const resolution = 1 + (
distance(self.start.x, self.end.x) + distance(self.start.y, self.end.y)
) / 8;
@@ -37,7 +37,7 @@ pub const Curve = struct {
canvas.buffer[last.x + last.y * canvas.width] = .{ .red = 0xff, .green = 0xff, .blue = 0xff };
- for (1..resolution) |index| {
+ for (1..resolution + 1) |index| {
const t: f64 = @as(f64, @floatFromInt(index)) / @as(f64, @floatFromInt(resolution));
const x: u32 = @intFromFloat(@round(
(1 - t) * ((1 - t) * start_x + t * middle_x) + t * ((1 - t) * middle_x + t * end_x)
diff --git a/src/screen/main.zig b/src/screen/main.zig
index 0ee7e17..2387f57 100644
--- a/src/screen/main.zig
+++ b/src/screen/main.zig
@@ -33,30 +33,40 @@ pub fn main() !void {
var curve = graphics.Curve {
.start = .{ .x = center_x, .y = center_y },
- .middle = .{ .x = center_x, .y = center_y + 150 },
- .end = .{ .x = center_x + 110 , .y = center_y + 100 },
+ .middle = .{ .x = center_x + 200, .y = center_y - 150 },
+ .end = .{ .x = center_x + 100 , .y = center_y + 100 },
.color = .{ .red = 0xff, .green = 0, .blue = 0 },
};
var last_duration: f64 = 0;
var delta: f64 = 0;
+ var angle: f64 = 0;
while (true) {
const start = try std.time.Instant.now();
const canvas = buffer.canvas();
- canvas.fill(.{ .red = 0x5, .green = 0x5, .blue = 0x5 });
+ canvas.fill(.{ .red = 0x25, .green = 0x25, .blue = 0x25 });
- //(graphics.Box {
- // .x = center_x - 100,
- // .y = center_y - 100,
- // .width = 200,
- // .height = 200,
- // .radius = 100,
- // .color = .{ .red = 0xff, .green = 0xff, .blue = 0xff },
- //}).render(&canvas);
+ (graphics.Box {
+ .x = center_x - 100,
+ .y = center_y - 100,
+ .width = 200,
+ .height = 200,
+ .radius = 100,
+ .color = .{ .red = 0xff, .green = 0xff, .blue = 0xff },
+ }).render(&canvas);
curve.render(&canvas);
+ const cos = @cos(std.math.degreesToRadians(angle));
+ const sin = @sin(std.math.degreesToRadians(angle));
+ curve.end.x = @intCast(@as(i64, @intCast(center_x)) + @as(i64, @intFromFloat(100 * cos)));
+ curve.end.y = @intCast(@as(i64, @intCast(center_y)) + @as(i64, @intFromFloat(100 * sin)));
+
+ angle += delta;
+ if (angle > 360) {
+ angle = 0;
+ }
const end = try std.time.Instant.now();
const duration: f64 = @floatFromInt(end.since(start));