コード例 #1
0
ファイル: test_primitives.py プロジェクト: qTipTip/RayTracer
def test_sphere_intersection_scaled():
    r = Ray(Point(0, 0, -5), Vector(0, 0, 1))
    s = Sphere()
    s.set_transform(scaling(2, 2, 2))
    x = r.intersects(s)
    assert len(x) == 2
    assert x[0].t == 3
    assert x[1].t == 7
コード例 #2
0
ファイル: test_primitives.py プロジェクト: qTipTip/RayTracer
def test_sphere_normal_at_scaled():
    s = Sphere()
    s.set_transform(scaling(1, 0.5, 1))
    n = s.normal_at(Point(0, sqrt(2) / 2, -sqrt(2) / 2))
    assert n == Vector(0, 0.9701425001453319, -0.24253562503633297)
コード例 #3
0
ファイル: test_primitives.py プロジェクト: qTipTip/RayTracer
def test_sphere_normal_at_translate():
    s = Sphere()
    s.set_transform(translation(0, 1, 0))
    n = s.normal_at(Point(0, 1.70711, -0.70711))
    assert n == Vector(0, 0.7071067811865475, -0.7071067811865476)
コード例 #4
0
ファイル: test_primitives.py プロジェクト: qTipTip/RayTracer
def test_sphere_intersection_translate():
    r = Ray(Point(0, 0, -5), Vector(0, 0, 1))
    s = Sphere()
    s.set_transform(translation(5, 0, 0))
    x = r.intersects(s)
    assert len(x) == 0
コード例 #5
0
ファイル: test_primitives.py プロジェクト: qTipTip/RayTracer
def test_sphere_translate():
    s = Sphere()
    t = translation(2, 3, 4)
    s.set_transform(t)

    assert s.transform == t
コード例 #6
0
from math import pi

from src.canvas import Canvas
from src.color import Color
from src.primitives import Sphere
from src.ray import Ray
from src.transformations import scaling, rotation_z
from src.tupl import Point

s = Sphere()
t = rotation_z(pi / 4) @ scaling(0.5, 1, 1)
s.set_transform(t)
r_origin = Point(0, 0, -5)
wall_z = 10
wall_size = 7

N = 100
c = Canvas(N, N)
pixel_size = wall_size / N
half = wall_size / 2
red = Color(255, 0, 0)

for y in range(c.height):
    world_y = half - pixel_size * y
    for x in range(c.width):
        world_x = -half + pixel_size * x
        position = Point(world_x, world_y, wall_z)
        r = Ray(r_origin, (position - r_origin).normalize())
        X = r.intersects(s)
        if X.hit is not None:
            c.write_pixel(x, y, red)