add math and image

This commit is contained in:
2024-08-03 01:26:08 +02:00
parent 2d2f5090ea
commit 028d19b118
9 changed files with 65882 additions and 0 deletions

View File

@@ -0,0 +1,16 @@
package eu.jonahbauer.raytracing.math;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class RayTest {
@Test
void at() {
var origin = new Vec3(0, 0, 0);
var direction = new Vec3(1, 2, 3);
var ray = new Ray(origin, direction);
assertEquals(new Vec3(5, 10, 15), ray.at(5));
}
}

View File

@@ -0,0 +1,61 @@
package eu.jonahbauer.raytracing.math;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class Vec3Test {
@Test
void plus() {
var a = new Vec3(1, 2, 3);
var b = new Vec3(-1, 1, -2);
assertEquals(new Vec3(0, 3, 1), a.plus(b));
}
@Test
void minus() {
var a = new Vec3(1, 2, 3);
var b = new Vec3(-1, 1, -2);
assertEquals(new Vec3(2, 1, 5), a.minus(b));
}
@Test
void timesVec() {
var a = new Vec3(1, 2, 3);
var b = new Vec3(-1, 1, -2);
assertEquals(-5, a.times(b));
}
@Test
void timeScalar() {
var a = new Vec3(1, 2, 3);
var b = 2.5;
assertEquals(new Vec3(2.5, 5, 7.5), a.times(b));
}
@Test
void div() {
var a = new Vec3(1, 2, 3);
var b = 2;
assertEquals(new Vec3(0.5, 1, 1.5), a.div(b));
}
@Test
void squared() {
var a = new Vec3(1, 2, 3);
assertEquals(14, a.squared());
}
@Test
void length() {
var a = new Vec3(3, 4, 0);
assertEquals(5, a.length());
}
@Test
void unit() {
var a = new Vec3(3, 4, 0);
assertEquals(new Vec3(0.6, 0.8, 0), a.unit());
}
}

View File

@@ -0,0 +1,47 @@
package eu.jonahbauer.raytracing.render;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Objects;
import static org.junit.jupiter.api.Assertions.assertEquals;
class ImageTest {
@Test
void test(@TempDir Path dir) throws IOException {
var image = new Image(256, 256);
for (var y = 0; y < image.height(); y++) {
for (var x = 0; x < image.width(); x++) {
var r = (double) x / (image.width() - 1);
var g = (double) y / (image.height() - 1);
var b = 0;
image.set(x, y, r, g, b);
}
}
System.out.println(dir);
ImageIO.write(image, dir.resolve("img.ppm"));
String expected;
String actual;
try (var in = Objects.requireNonNull(ImageTest.class.getResourceAsStream("simple_image.ppm"))) {
expected = new String(in.readAllBytes(), StandardCharsets.US_ASCII);
}
try (var in = Files.newInputStream(dir.resolve("img.ppm"))) {
actual = new String(in.readAllBytes(), StandardCharsets.US_ASCII);
}
assertEquals(expected, actual);
}
}

File diff suppressed because it is too large Load Diff