Skip to content

Instantly share code, notes, and snippets.

@sebastianbergmann
Created May 22, 2025 13:27
Show Gist options
  • Save sebastianbergmann/2373d029e8972e038929f717c5ffa868 to your computer and use it in GitHub Desktop.
Save sebastianbergmann/2373d029e8972e038929f717c5ffa868 to your computer and use it in GitHub Desktop.
<?xml version="1.0" encoding="UTF-8"?>
<coverage clover="12.2.1-20-g01703b78" generated="1747920392">
<project timestamp="1747920392" name="Clover Coverage">
<metrics files="34" loc="2242" ncloc="2033" classes="27" complexity="275" elements="830" coveredelements="828" conditionals="0" coveredconditionals="0" statements="635" coveredstatements="634" methods="195" coveredmethods="194"/>
<package name="SebastianBergmann\Raytracer">
<metrics complexity="275" elements="830" coveredelements="828" conditionals="0" coveredconditionals="0" statements="635" coveredstatements="634" methods="195" coveredmethods="194"/>
<file name="Camera.php" path="/usr/local/src/raytracer/src/Camera.php">
<metrics loc="150" ncloc="127" classes="1" complexity="17" elements="53" coveredelements="53" conditionals="0" coveredconditionals="0" statements="39" coveredstatements="39" methods="14" coveredmethods="14"/>
<class name="Camera">
<metrics complexity="17" elements="53" coveredelements="53" conditionals="0" coveredconditionals="0" statements="39" coveredstatements="39" methods="14" coveredmethods="14"/>
</class>
<line num="30" type="method" complexity="1" count="7" signature="from(int $horizontalSize, int $verticalSize, float $fieldOfView): self" visibility="public"/>
<line num="32" type="stmt" count="7"/>
<line num="39" type="method" complexity="2" count="7" signature="__construct(int $horizontalSize, int $verticalSize, float $fieldOfView, Matrix $transform)" visibility="private"/>
<line num="41" type="stmt" count="7"/>
<line num="42" type="stmt" count="7"/>
<line num="43" type="stmt" count="7"/>
<line num="44" type="stmt" count="7"/>
<line num="46" type="stmt" count="7"/>
<line num="47" type="stmt" count="7"/>
<line num="49" type="stmt" count="7"/>
<line num="50" type="stmt" count="6"/>
<line num="51" type="stmt" count="6"/>
<line num="53" type="stmt" count="1"/>
<line num="54" type="stmt" count="1"/>
<line num="57" type="stmt" count="7"/>
<line num="63" type="method" complexity="1" count="1" signature="horizontalSize(): int" visibility="public"/>
<line num="65" type="stmt" count="1"/>
<line num="71" type="method" complexity="1" count="1" signature="verticalSize(): int" visibility="public"/>
<line num="73" type="stmt" count="1"/>
<line num="76" type="method" complexity="1" count="1" signature="fieldOfView(): float" visibility="public"/>
<line num="78" type="stmt" count="1"/>
<line num="81" type="method" complexity="1" count="1" signature="transform(): Matrix" visibility="public"/>
<line num="83" type="stmt" count="1"/>
<line num="86" type="method" complexity="1" count="1" signature="halfView(): float" visibility="public"/>
<line num="88" type="stmt" count="1"/>
<line num="91" type="method" complexity="1" count="1" signature="aspect(): float" visibility="public"/>
<line num="93" type="stmt" count="1"/>
<line num="96" type="method" complexity="1" count="1" signature="cameraHalfWidth(): float" visibility="public"/>
<line num="98" type="stmt" count="1"/>
<line num="101" type="method" complexity="1" count="1" signature="cameraHalfHeight(): float" visibility="public"/>
<line num="103" type="stmt" count="1"/>
<line num="106" type="method" complexity="1" count="2" signature="pixelSize(): float" visibility="public"/>
<line num="108" type="stmt" count="2"/>
<line num="111" type="method" complexity="1" count="2" signature="setTransform(Matrix $transform): void" visibility="public"/>
<line num="113" type="stmt" count="2"/>
<line num="119" type="method" complexity="1" count="4" signature="rayForPixel(int $px, int $py): Ray" visibility="public"/>
<line num="121" type="stmt" count="4"/>
<line num="122" type="stmt" count="4"/>
<line num="124" type="stmt" count="4"/>
<line num="125" type="stmt" count="4"/>
<line num="127" type="stmt" count="4"/>
<line num="128" type="stmt" count="4"/>
<line num="129" type="stmt" count="4"/>
<line num="130" type="stmt" count="4"/>
<line num="132" type="stmt" count="4"/>
<line num="135" type="method" complexity="3" count="1" signature="render(World $world): Canvas" visibility="public"/>
<line num="137" type="stmt" count="1"/>
<line num="139" type="stmt" count="1"/>
<line num="140" type="stmt" count="1"/>
<line num="141" type="stmt" count="1"/>
<line num="142" type="stmt" count="1"/>
<line num="143" type="stmt" count="1"/>
<line num="147" type="stmt" count="1"/>
</file>
<file name="Color.php" path="/usr/local/src/raytracer/src/Color.php">
<metrics loc="135" ncloc="123" classes="1" complexity="19" elements="57" coveredelements="57" conditionals="0" coveredconditionals="0" statements="43" coveredstatements="43" methods="14" coveredmethods="14"/>
<class name="Color">
<metrics complexity="19" elements="57" coveredelements="57" conditionals="0" coveredconditionals="0" statements="43" coveredstatements="43" methods="14" coveredmethods="14"/>
</class>
<line num="13" type="method" complexity="1" count="7" signature="from(float $red, float $green, float $blue): self" visibility="public"/>
<line num="15" type="stmt" count="7"/>
<line num="18" type="method" complexity="1" count="7" signature="__construct(float $red, float $green, float $blue)" visibility="private"/>
<line num="20" type="stmt" count="7"/>
<line num="21" type="stmt" count="7"/>
<line num="22" type="stmt" count="7"/>
<line num="25" type="method" complexity="1" count="6" signature="red(): float" visibility="public"/>
<line num="27" type="stmt" count="6"/>
<line num="33" type="method" complexity="1" count="1" signature="redAsInt(): int" visibility="public"/>
<line num="35" type="stmt" count="1"/>
<line num="38" type="method" complexity="1" count="6" signature="green(): float" visibility="public"/>
<line num="40" type="stmt" count="6"/>
<line num="46" type="method" complexity="1" count="1" signature="greenAsInt(): int" visibility="public"/>
<line num="48" type="stmt" count="1"/>
<line num="51" type="method" complexity="1" count="6" signature="blue(): float" visibility="public"/>
<line num="53" type="stmt" count="6"/>
<line num="59" type="method" complexity="1" count="1" signature="blueAsInt(): int" visibility="public"/>
<line num="61" type="stmt" count="1"/>
<line num="64" type="method" complexity="1" count="1" signature="plus(self $that): self" visibility="public"/>
<line num="66" type="stmt" count="1"/>
<line num="67" type="stmt" count="1"/>
<line num="68" type="stmt" count="1"/>
<line num="69" type="stmt" count="1"/>
<line num="70" type="stmt" count="1"/>
<line num="73" type="method" complexity="1" count="1" signature="minus(self $that): self" visibility="public"/>
<line num="75" type="stmt" count="1"/>
<line num="76" type="stmt" count="1"/>
<line num="77" type="stmt" count="1"/>
<line num="78" type="stmt" count="1"/>
<line num="79" type="stmt" count="1"/>
<line num="82" type="method" complexity="1" count="1" signature="multiplyBy(float $factor): self" visibility="public"/>
<line num="84" type="stmt" count="1"/>
<line num="85" type="stmt" count="1"/>
<line num="86" type="stmt" count="1"/>
<line num="87" type="stmt" count="1"/>
<line num="88" type="stmt" count="1"/>
<line num="91" type="method" complexity="1" count="1" signature="product(self $that): self" visibility="public"/>
<line num="93" type="stmt" count="1"/>
<line num="94" type="stmt" count="1"/>
<line num="95" type="stmt" count="1"/>
<line num="96" type="stmt" count="1"/>
<line num="97" type="stmt" count="1"/>
<line num="100" type="method" complexity="4" count="1" signature="equalTo(self $that, float $delta): bool" visibility="public"/>
<line num="102" type="stmt" count="1"/>
<line num="103" type="stmt" count="1"/>
<line num="106" type="stmt" count="1"/>
<line num="107" type="stmt" count="1"/>
<line num="110" type="stmt" count="1"/>
<line num="111" type="stmt" count="1"/>
<line num="114" type="stmt" count="1"/>
<line num="120" type="method" complexity="3" count="1" signature="floatToInt(float $float): int" visibility="private"/>
<line num="122" type="stmt" count="1"/>
<line num="124" type="stmt" count="1"/>
<line num="125" type="stmt" count="1"/>
<line num="128" type="stmt" count="1"/>
<line num="129" type="stmt" count="1"/>
<line num="132" type="stmt" count="1"/>
</file>
<file name="PointLight.php" path="/usr/local/src/raytracer/src/PointLight.php">
<metrics loc="30" ncloc="30" classes="1" complexity="4" elements="9" coveredelements="9" conditionals="0" coveredconditionals="0" statements="5" coveredstatements="5" methods="4" coveredmethods="4"/>
<class name="PointLight">
<metrics complexity="4" elements="9" coveredelements="9" conditionals="0" coveredconditionals="0" statements="5" coveredstatements="5" methods="4" coveredmethods="4"/>
</class>
<line num="9" type="method" complexity="1" count="1" signature="from(Tuple $position, Color $intensity): self" visibility="public"/>
<line num="11" type="stmt" count="1"/>
<line num="14" type="method" complexity="1" count="1" signature="__construct(Tuple $position, Color $intensity)" visibility="private"/>
<line num="16" type="stmt" count="1"/>
<line num="17" type="stmt" count="1"/>
<line num="20" type="method" complexity="1" count="1" signature="position(): Tuple" visibility="public"/>
<line num="22" type="stmt" count="1"/>
<line num="25" type="method" complexity="1" count="1" signature="intensity(): Color" visibility="public"/>
<line num="27" type="stmt" count="1"/>
</file>
<file name="World.php" path="/usr/local/src/raytracer/src/World.php">
<metrics loc="124" ncloc="109" classes="1" complexity="14" elements="54" coveredelements="54" conditionals="0" coveredconditionals="0" statements="44" coveredstatements="44" methods="10" coveredmethods="10"/>
<class name="World">
<metrics complexity="14" elements="54" coveredelements="54" conditionals="0" coveredconditionals="0" statements="44" coveredstatements="44" methods="10" coveredmethods="10"/>
</class>
<line num="9" type="method" complexity="1" count="11" signature="default(): self" visibility="public"/>
<line num="11" type="stmt" count="11"/>
<line num="12" type="stmt" count="11"/>
<line num="13" type="stmt" count="11"/>
<line num="14" type="stmt" count="11"/>
<line num="16" type="stmt" count="11"/>
<line num="17" type="stmt" count="11"/>
<line num="19" type="stmt" count="11"/>
<line num="20" type="stmt" count="11"/>
<line num="22" type="stmt" count="11"/>
<line num="24" type="stmt" count="11"/>
<line num="25" type="stmt" count="11"/>
<line num="26" type="stmt" count="11"/>
<line num="28" type="stmt" count="11"/>
<line num="31" type="method" complexity="1" count="13" signature="__construct()" visibility="public"/>
<line num="33" type="stmt" count="13"/>
<line num="36" type="method" complexity="1" count="12" signature="add(Shape $shape): void" visibility="public"/>
<line num="38" type="stmt" count="12"/>
<line num="41" type="method" complexity="1" count="5" signature="shapes(): ShapeCollection" visibility="public"/>
<line num="43" type="stmt" count="5"/>
<line num="49" type="method" complexity="2" count="11" signature="light(): PointLight" visibility="public"/>
<line num="51" type="stmt" count="11"/>
<line num="52" type="stmt" count="1"/>
<line num="55" type="stmt" count="10"/>
<line num="58" type="method" complexity="1" count="12" signature="setLight(PointLight $light): void" visibility="public"/>
<line num="60" type="stmt" count="12"/>
<line num="67" type="method" complexity="2" count="3" signature="colorAt(Ray $r): Color" visibility="public"/>
<line num="69" type="stmt" count="3"/>
<line num="71" type="stmt" count="3"/>
<line num="72" type="stmt" count="1"/>
<line num="75" type="stmt" count="2"/>
<line num="77" type="stmt" count="2"/>
<line num="80" type="method" complexity="2" count="11" signature="intersect(Ray $r): IntersectionCollection" visibility="public"/>
<line num="82" type="stmt" count="11"/>
<line num="84" type="stmt" count="11"/>
<line num="85" type="stmt" count="11"/>
<line num="88" type="stmt" count="11"/>
<line num="95" type="method" complexity="1" count="5" signature="shadeHit(PreparedComputation $computation): Color" visibility="public"/>
<line num="97" type="stmt" count="5"/>
<line num="99" type="stmt" count="5"/>
<line num="100" type="stmt" count="5"/>
<line num="101" type="stmt" count="5"/>
<line num="102" type="stmt" count="5"/>
<line num="103" type="stmt" count="5"/>
<line num="104" type="stmt" count="5"/>
<line num="105" type="stmt" count="5"/>
<line num="106" type="stmt" count="5"/>
<line num="113" type="method" complexity="2" count="9" signature="isShadowed(Tuple $point): bool" visibility="public"/>
<line num="115" type="stmt" count="9"/>
<line num="116" type="stmt" count="9"/>
<line num="117" type="stmt" count="9"/>
<line num="118" type="stmt" count="9"/>
<line num="119" type="stmt" count="9"/>
<line num="121" type="stmt" count="9"/>
</file>
<file name="AnsiMapper.php" path="/usr/local/src/raytracer/src/canvas/AnsiMapper.php">
<metrics loc="45" ncloc="42" classes="1" complexity="4" elements="17" coveredelements="17" conditionals="0" coveredconditionals="0" statements="16" coveredstatements="16" methods="1" coveredmethods="1"/>
<class name="AnsiMapper">
<metrics complexity="4" elements="17" coveredelements="17" conditionals="0" coveredconditionals="0" statements="16" coveredstatements="16" methods="1" coveredmethods="1"/>
</class>
<line num="11" type="method" complexity="3" count="1" signature="map(Canvas $canvas): string" visibility="public"/>
<line num="13" type="stmt" count="1"/>
<line num="15" type="stmt" count="1"/>
<line num="16" type="stmt" count="1"/>
<line num="17" type="stmt" count="1"/>
<line num="18" type="stmt" count="1"/>
<line num="20" type="stmt" count="1"/>
<line num="21" type="stmt" count="1"/>
<line num="22" type="stmt" count="1"/>
<line num="23" type="stmt" count="1"/>
<line num="24" type="stmt" count="1"/>
<line num="25" type="stmt" count="1"/>
<line num="26" type="stmt" count="1"/>
<line num="27" type="stmt" count="1"/>
<line num="28" type="stmt" count="1"/>
<line num="31" type="stmt" count="1"/>
<line num="34" type="stmt" count="1"/>
</file>
<file name="Canvas.php" path="/usr/local/src/raytracer/src/canvas/Canvas.php">
<metrics loc="98" ncloc="64" classes="1" complexity="10" elements="21" coveredelements="21" conditionals="0" coveredconditionals="0" statements="13" coveredstatements="13" methods="8" coveredmethods="8"/>
<class name="Canvas">
<metrics complexity="10" elements="21" coveredelements="21" conditionals="0" coveredconditionals="0" statements="13" coveredstatements="13" methods="8" coveredmethods="8"/>
</class>
<line num="31" type="method" complexity="1" count="4" signature="from(int $width, int $height, Color $background): self" visibility="public"/>
<line num="33" type="stmt" count="4"/>
<line num="40" type="method" complexity="1" count="4" signature="__construct(int $width, int $height, Color $background)" visibility="private"/>
<line num="42" type="stmt" count="4"/>
<line num="43" type="stmt" count="4"/>
<line num="45" type="stmt" count="4"/>
<line num="51" type="method" complexity="1" count="2" signature="width(): int" visibility="public"/>
<line num="53" type="stmt" count="2"/>
<line num="59" type="method" complexity="1" count="2" signature="height(): int" visibility="public"/>
<line num="61" type="stmt" count="2"/>
<line num="68" type="method" complexity="1" count="3" signature="pixelAt(int $x, int $y): Color" visibility="public"/>
<line num="70" type="stmt" count="3"/>
<line num="77" type="method" complexity="1" count="1" signature="writePixel(int $x, int $y, Color $c): void" visibility="public"/>
<line num="79" type="stmt" count="1"/>
<line num="82" type="method" complexity="1" count="1" signature="getIterator(): CanvasIterator" visibility="public"/>
<line num="84" type="stmt" count="1"/>
<line num="87" type="method" complexity="3" count="4" signature="initializePixels(Color $background): void" visibility="private"/>
<line num="89" type="stmt" count="4"/>
<line num="91" type="stmt" count="4"/>
<line num="92" type="stmt" count="4"/>
<line num="93" type="stmt" count="4"/>
</file>
<file name="CanvasIterator.php" path="/usr/local/src/raytracer/src/canvas/CanvasIterator.php">
<metrics loc="67" ncloc="55" classes="1" complexity="8" elements="18" coveredelements="18" conditionals="0" coveredconditionals="0" statements="12" coveredstatements="12" methods="6" coveredmethods="6"/>
<class name="CanvasIterator">
<metrics complexity="8" elements="18" coveredelements="18" conditionals="0" coveredconditionals="0" statements="12" coveredstatements="12" methods="6" coveredmethods="6"/>
</class>
<line num="28" type="method" complexity="1" count="1" signature="__construct(Canvas $canvas)" visibility="public"/>
<line num="30" type="stmt" count="1"/>
<line num="33" type="method" complexity="1" count="1" signature="rewind(): void" visibility="public"/>
<line num="35" type="stmt" count="1"/>
<line num="36" type="stmt" count="1"/>
<line num="37" type="stmt" count="1"/>
<line num="40" type="method" complexity="2" count="1" signature="valid(): bool" visibility="public"/>
<line num="42" type="stmt" count="1"/>
<line num="45" type="method" complexity="1" count="1" signature="key(): int" visibility="public"/>
<line num="47" type="stmt" count="1"/>
<line num="50" type="method" complexity="1" count="1" signature="current(): Color" visibility="public"/>
<line num="52" type="stmt" count="1"/>
<line num="55" type="method" complexity="2" count="1" signature="next(): void" visibility="public"/>
<line num="57" type="stmt" count="1"/>
<line num="58" type="stmt" count="1"/>
<line num="60" type="stmt" count="1"/>
<line num="61" type="stmt" count="1"/>
<line num="64" type="stmt" count="1"/>
</file>
<file name="PortablePixmapMapper.php" path="/usr/local/src/raytracer/src/canvas/PortablePixmapMapper.php">
<metrics loc="50" ncloc="47" classes="1" complexity="4" elements="20" coveredelements="20" conditionals="0" coveredconditionals="0" statements="19" coveredstatements="19" methods="1" coveredmethods="1"/>
<class name="PortablePixmapMapper">
<metrics complexity="4" elements="20" coveredelements="20" conditionals="0" coveredconditionals="0" statements="19" coveredstatements="19" methods="1" coveredmethods="1"/>
</class>
<line num="10" type="method" complexity="3" count="1" signature="map(Canvas $canvas): string" visibility="public"/>
<line num="12" type="stmt" count="1"/>
<line num="13" type="stmt" count="1"/>
<line num="14" type="stmt" count="1"/>
<line num="15" type="stmt" count="1"/>
<line num="16" type="stmt" count="1"/>
<line num="18" type="stmt" count="1"/>
<line num="20" type="stmt" count="1"/>
<line num="21" type="stmt" count="1"/>
<line num="22" type="stmt" count="1"/>
<line num="23" type="stmt" count="1"/>
<line num="24" type="stmt" count="1"/>
<line num="25" type="stmt" count="1"/>
<line num="26" type="stmt" count="1"/>
<line num="28" type="stmt" count="1"/>
<line num="30" type="stmt" count="1"/>
<line num="31" type="stmt" count="1"/>
<line num="33" type="stmt" count="1"/>
<line num="35" type="stmt" count="1"/>
<line num="39" type="stmt" count="1"/>
</file>
<file name="WebpMapper.php" path="/usr/local/src/raytracer/src/canvas/WebpMapper.php">
<metrics loc="60" ncloc="54" classes="0" complexity="6" elements="0" coveredelements="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" methods="0" coveredmethods="0"/>
<class name="WebpMapper">
<metrics complexity="6" elements="0" coveredelements="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" methods="0" coveredmethods="0"/>
</class>
</file>
<file name="IntersectionHasNoHitException.php" path="/usr/local/src/raytracer/src/exceptions/IntersectionHasNoHitException.php">
<metrics loc="9" ncloc="9" classes="0" complexity="0" elements="0" coveredelements="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" methods="0" coveredmethods="0"/>
<class name="IntersectionHasNoHitException">
<metrics complexity="0" elements="0" coveredelements="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" methods="0" coveredmethods="0"/>
</class>
</file>
<file name="InvalidArgumentException.php" path="/usr/local/src/raytracer/src/exceptions/InvalidArgumentException.php">
<metrics loc="7" ncloc="7" classes="0" complexity="0" elements="0" coveredelements="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" methods="0" coveredmethods="0"/>
<class name="InvalidArgumentException">
<metrics complexity="0" elements="0" coveredelements="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" methods="0" coveredmethods="0"/>
</class>
</file>
<file name="OutOfBoundsException.php" path="/usr/local/src/raytracer/src/exceptions/OutOfBoundsException.php">
<metrics loc="7" ncloc="7" classes="0" complexity="0" elements="0" coveredelements="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" methods="0" coveredmethods="0"/>
<class name="OutOfBoundsException">
<metrics complexity="0" elements="0" coveredelements="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" methods="0" coveredmethods="0"/>
</class>
</file>
<file name="RuntimeException.php" path="/usr/local/src/raytracer/src/exceptions/RuntimeException.php">
<metrics loc="7" ncloc="7" classes="0" complexity="0" elements="0" coveredelements="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" methods="0" coveredmethods="0"/>
<class name="RuntimeException">
<metrics complexity="0" elements="0" coveredelements="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" methods="0" coveredmethods="0"/>
</class>
</file>
<file name="WorldHasNoLightException.php" path="/usr/local/src/raytracer/src/exceptions/WorldHasNoLightException.php">
<metrics loc="9" ncloc="9" classes="0" complexity="0" elements="0" coveredelements="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" methods="0" coveredmethods="0"/>
<class name="WorldHasNoLightException">
<metrics complexity="0" elements="0" coveredelements="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" methods="0" coveredmethods="0"/>
</class>
</file>
<file name="Intersection.php" path="/usr/local/src/raytracer/src/intersection/Intersection.php">
<metrics loc="58" ncloc="55" classes="1" complexity="6" elements="27" coveredelements="27" conditionals="0" coveredconditionals="0" statements="22" coveredstatements="22" methods="5" coveredmethods="5"/>
<class name="Intersection">
<metrics complexity="6" elements="27" coveredelements="27" conditionals="0" coveredconditionals="0" statements="22" coveredstatements="22" methods="5" coveredmethods="5"/>
</class>
<line num="9" type="method" complexity="1" count="10" signature="from(float $t, Shape $shape): self" visibility="public"/>
<line num="11" type="stmt" count="10"/>
<line num="14" type="method" complexity="1" count="10" signature="__construct(float $t, Shape $shape)" visibility="private"/>
<line num="16" type="stmt" count="10"/>
<line num="17" type="stmt" count="10"/>
<line num="20" type="method" complexity="1" count="9" signature="t(): float" visibility="public"/>
<line num="22" type="stmt" count="9"/>
<line num="25" type="method" complexity="1" count="3" signature="shape(): Shape" visibility="public"/>
<line num="27" type="stmt" count="3"/>
<line num="33" type="method" complexity="2" count="3" signature="prepare(Ray $r): PreparedComputation" visibility="public"/>
<line num="35" type="stmt" count="3"/>
<line num="36" type="stmt" count="3"/>
<line num="37" type="stmt" count="3"/>
<line num="38" type="stmt" count="3"/>
<line num="40" type="stmt" count="3"/>
<line num="41" type="stmt" count="1"/>
<line num="42" type="stmt" count="1"/>
<line num="45" type="stmt" count="3"/>
<line num="47" type="stmt" count="3"/>
<line num="48" type="stmt" count="3"/>
<line num="49" type="stmt" count="3"/>
<line num="50" type="stmt" count="3"/>
<line num="51" type="stmt" count="3"/>
<line num="52" type="stmt" count="3"/>
<line num="53" type="stmt" count="3"/>
<line num="54" type="stmt" count="3"/>
<line num="55" type="stmt" count="3"/>
</file>
<file name="IntersectionCollection.php" path="/usr/local/src/raytracer/src/intersection/IntersectionCollection.php">
<metrics loc="125" ncloc="102" classes="1" complexity="15" elements="44" coveredelements="44" conditionals="0" coveredconditionals="0" statements="33" coveredstatements="33" methods="11" coveredmethods="11"/>
<class name="IntersectionCollection">
<metrics complexity="15" elements="44" coveredelements="44" conditionals="0" coveredconditionals="0" statements="33" coveredstatements="33" methods="11" coveredmethods="11"/>
</class>
<line num="23" type="method" complexity="3" count="6" signature="from(Intersection $intersections): self" visibility="public"/>
<line num="25" type="stmt" count="6"/>
<line num="26" type="stmt" count="6"/>
<line num="27" type="stmt" count="6"/>
<line num="28" type="stmt" count="6"/>
<line num="29" type="stmt" count="6"/>
<line num="30" type="stmt" count="6"/>
<line num="31" type="stmt" count="6"/>
<line num="33" type="stmt" count="6"/>
<line num="35" type="stmt" count="6"/>
<line num="36" type="stmt" count="6"/>
<line num="37" type="stmt" count="5"/>
<line num="39" type="stmt" count="5"/>
<line num="43" type="stmt" count="6"/>
<line num="49" type="method" complexity="1" count="6" signature="__construct(array $intersections, ?Intersection $hit)" visibility="private"/>
<line num="51" type="stmt" count="6"/>
<line num="52" type="stmt" count="6"/>
<line num="58" type="method" complexity="1" count="2" signature="asArray(): array" visibility="public"/>
<line num="60" type="stmt" count="2"/>
<line num="66" type="method" complexity="2" count="2" signature="at(int $position): Intersection" visibility="public"/>
<line num="68" type="stmt" count="2"/>
<line num="69" type="stmt" count="1"/>
<line num="72" type="stmt" count="2"/>
<line num="75" type="method" complexity="1" count="2" signature="count(): int" visibility="public"/>
<line num="77" type="stmt" count="2"/>
<line num="80" type="method" complexity="1" count="2" signature="isEmpty(): bool" visibility="public"/>
<line num="82" type="stmt" count="2"/>
<line num="85" type="method" complexity="1" count="2" signature="isNotEmpty(): bool" visibility="public"/>
<line num="87" type="stmt" count="2"/>
<line num="90" type="method" complexity="1" count="1" signature="getIterator(): IntersectionCollectionIterator" visibility="public"/>
<line num="92" type="stmt" count="1"/>
<line num="98" type="method" complexity="1" count="4" signature="hasHit(): bool" visibility="public"/>
<line num="100" type="stmt" count="4"/>
<line num="106" type="method" complexity="2" count="4" signature="hit(): Intersection" visibility="public"/>
<line num="108" type="stmt" count="4"/>
<line num="109" type="stmt" count="1"/>
<line num="112" type="stmt" count="3"/>
<line num="115" type="method" complexity="1" count="1" signature="merge(self $other): self" visibility="public"/>
<line num="117" type="stmt" count="1"/>
<line num="118" type="stmt" count="1"/>
<line num="119" type="stmt" count="1"/>
<line num="120" type="stmt" count="1"/>
<line num="121" type="stmt" count="1"/>
<line num="122" type="stmt" count="1"/>
</file>
<file name="IntersectionCollectionIterator.php" path="/usr/local/src/raytracer/src/intersection/IntersectionCollectionIterator.php">
<metrics loc="48" ncloc="42" classes="1" complexity="6" elements="12" coveredelements="12" conditionals="0" coveredconditionals="0" statements="6" coveredstatements="6" methods="6" coveredmethods="6"/>
<class name="IntersectionCollectionIterator">
<metrics complexity="6" elements="12" coveredelements="12" conditionals="0" coveredconditionals="0" statements="6" coveredstatements="6" methods="6" coveredmethods="6"/>
</class>
<line num="18" type="method" complexity="1" count="1" signature="__construct(IntersectionCollection $intersections)" visibility="public"/>
<line num="20" type="stmt" count="1"/>
<line num="23" type="method" complexity="1" count="1" signature="rewind(): void" visibility="public"/>
<line num="25" type="stmt" count="1"/>
<line num="28" type="method" complexity="1" count="1" signature="valid(): bool" visibility="public"/>
<line num="30" type="stmt" count="1"/>
<line num="33" type="method" complexity="1" count="1" signature="key(): int" visibility="public"/>
<line num="35" type="stmt" count="1"/>
<line num="38" type="method" complexity="1" count="1" signature="current(): Intersection" visibility="public"/>
<line num="40" type="stmt" count="1"/>
<line num="43" type="method" complexity="1" count="1" signature="next(): void" visibility="public"/>
<line num="45" type="stmt" count="1"/>
</file>
<file name="PreparedComputation.php" path="/usr/local/src/raytracer/src/intersection/PreparedComputation.php">
<metrics loc="60" ncloc="60" classes="1" complexity="8" elements="22" coveredelements="22" conditionals="0" coveredconditionals="0" statements="14" coveredstatements="14" methods="8" coveredmethods="8"/>
<class name="PreparedComputation">
<metrics complexity="8" elements="22" coveredelements="22" conditionals="0" coveredconditionals="0" statements="14" coveredstatements="14" methods="8" coveredmethods="8"/>
</class>
<line num="14" type="method" complexity="1" count="3" signature="__construct(float $t, Shape $shape, Tuple $point, Tuple $overPoint, Tuple $eye, Tuple $normal, bool $inside)" visibility="public"/>
<line num="16" type="stmt" count="3"/>
<line num="17" type="stmt" count="3"/>
<line num="18" type="stmt" count="3"/>
<line num="19" type="stmt" count="3"/>
<line num="20" type="stmt" count="3"/>
<line num="21" type="stmt" count="3"/>
<line num="22" type="stmt" count="3"/>
<line num="25" type="method" complexity="1" count="2" signature="t(): float" visibility="public"/>
<line num="27" type="stmt" count="2"/>
<line num="30" type="method" complexity="1" count="2" signature="shape(): Shape" visibility="public"/>
<line num="32" type="stmt" count="2"/>
<line num="35" type="method" complexity="1" count="3" signature="point(): Tuple" visibility="public"/>
<line num="37" type="stmt" count="3"/>
<line num="40" type="method" complexity="1" count="1" signature="overPoint(): Tuple" visibility="public"/>
<line num="42" type="stmt" count="1"/>
<line num="45" type="method" complexity="1" count="2" signature="eye(): Tuple" visibility="public"/>
<line num="47" type="stmt" count="2"/>
<line num="50" type="method" complexity="1" count="2" signature="normal(): Tuple" visibility="public"/>
<line num="52" type="stmt" count="2"/>
<line num="55" type="method" complexity="1" count="2" signature="inside(): bool" visibility="public"/>
<line num="57" type="stmt" count="2"/>
</file>
<file name="CheckersPattern.php" path="/usr/local/src/raytracer/src/material/CheckersPattern.php">
<metrics loc="28" ncloc="28" classes="1" complexity="3" elements="8" coveredelements="8" conditionals="0" coveredconditionals="0" statements="6" coveredstatements="6" methods="2" coveredmethods="2"/>
<class name="CheckersPattern">
<metrics complexity="3" elements="8" coveredelements="8" conditionals="0" coveredconditionals="0" statements="6" coveredstatements="6" methods="2" coveredmethods="2"/>
</class>
<line num="11" type="method" complexity="1" count="3" signature="__construct(Color $a, Color $b)" visibility="protected"/>
<line num="13" type="stmt" count="3"/>
<line num="14" type="stmt" count="3"/>
<line num="16" type="stmt" count="3"/>
<line num="19" type="method" complexity="2" count="3" signature="localPatternAt(Shape $object, Tuple $point): Color" visibility="public"/>
<line num="21" type="stmt" count="3"/>
<line num="22" type="stmt" count="3"/>
<line num="25" type="stmt" count="3"/>
</file>
<file name="GradientPattern.php" path="/usr/local/src/raytracer/src/material/GradientPattern.php">
<metrics loc="27" ncloc="27" classes="1" complexity="2" elements="8" coveredelements="8" conditionals="0" coveredconditionals="0" statements="6" coveredstatements="6" methods="2" coveredmethods="2"/>
<class name="GradientPattern">
<metrics complexity="2" elements="8" coveredelements="8" conditionals="0" coveredconditionals="0" statements="6" coveredstatements="6" methods="2" coveredmethods="2"/>
</class>
<line num="11" type="method" complexity="1" count="1" signature="__construct(Color $a, Color $b)" visibility="protected"/>
<line num="13" type="stmt" count="1"/>
<line num="14" type="stmt" count="1"/>
<line num="16" type="stmt" count="1"/>
<line num="19" type="method" complexity="1" count="1" signature="localPatternAt(Shape $object, Tuple $point): Color" visibility="public"/>
<line num="21" type="stmt" count="1"/>
<line num="22" type="stmt" count="1"/>
<line num="24" type="stmt" count="1"/>
</file>
<file name="Material.php" path="/usr/local/src/raytracer/src/material/Material.php">
<metrics loc="126" ncloc="123" classes="1" complexity="19" elements="52" coveredelements="50" conditionals="0" coveredconditionals="0" statements="37" coveredstatements="36" methods="15" coveredmethods="14"/>
<class name="Material">
<metrics complexity="19" elements="52" coveredelements="50" conditionals="0" coveredconditionals="0" statements="37" coveredstatements="36" methods="15" coveredmethods="14"/>
</class>
<line num="13" type="method" complexity="1" count="13" signature="default(): self" visibility="public"/>
<line num="15" type="stmt" count="13"/>
<line num="18" type="method" complexity="1" count="13" signature="from(Color $color, float $ambient, float $diffuse, float $specular, float $shininess): self" visibility="public"/>
<line num="20" type="stmt" count="13"/>
<line num="23" type="method" complexity="1" count="13" signature="__construct(Color $color, float $ambient, float $diffuse, float $specular, float $shininess)" visibility="private"/>
<line num="25" type="stmt" count="13"/>
<line num="26" type="stmt" count="13"/>
<line num="27" type="stmt" count="13"/>
<line num="28" type="stmt" count="13"/>
<line num="29" type="stmt" count="13"/>
<line num="32" type="method" complexity="1" count="2" signature="color(): Color" visibility="public"/>
<line num="34" type="stmt" count="2"/>
<line num="37" type="method" complexity="1" count="1" signature="setColor(Color $color): void" visibility="public"/>
<line num="39" type="stmt" count="1"/>
<line num="42" type="method" complexity="1" count="2" signature="ambient(): float" visibility="public"/>
<line num="44" type="stmt" count="2"/>
<line num="47" type="method" complexity="1" count="2" signature="setAmbient(float $ambient): void" visibility="public"/>
<line num="49" type="stmt" count="2"/>
<line num="52" type="method" complexity="1" count="2" signature="diffuse(): float" visibility="public"/>
<line num="54" type="stmt" count="2"/>
<line num="57" type="method" complexity="1" count="2" signature="setDiffuse(float $diffuse): void" visibility="public"/>
<line num="59" type="stmt" count="2"/>
<line num="62" type="method" complexity="1" count="2" signature="specular(): float" visibility="public"/>
<line num="64" type="stmt" count="2"/>
<line num="67" type="method" complexity="1" count="2" signature="setSpecular(float $specular): void" visibility="public"/>
<line num="69" type="stmt" count="2"/>
<line num="72" type="method" complexity="1" count="2" signature="shininess(): float" visibility="public"/>
<line num="74" type="stmt" count="2"/>
<line num="77" type="method" complexity="1" count="1" signature="setShininess(float $shininess): void" visibility="public"/>
<line num="79" type="stmt" count="1"/>
<line num="82" type="method" complexity="1" count="1" signature="setPattern(Pattern $pattern): void" visibility="public"/>
<line num="84" type="stmt" count="1"/>
<line num="90" type="method" complexity="5" count="7" signature="lighting(Shape $object, PointLight $light, Tuple $point, Tuple $eye, Tuple $normal, bool $inShadow): Color" visibility="public"/>
<line num="92" type="stmt" count="7"/>
<line num="93" type="stmt" count="1"/>
<line num="95" type="stmt" count="6"/>
<line num="98" type="stmt" count="7"/>
<line num="99" type="stmt" count="7"/>
<line num="101" type="stmt" count="7"/>
<line num="102" type="stmt" count="1"/>
<line num="105" type="stmt" count="6"/>
<line num="106" type="stmt" count="6"/>
<line num="108" type="stmt" count="6"/>
<line num="109" type="stmt" count="1"/>
<line num="110" type="stmt" count="1"/>
<line num="112" type="stmt" count="5"/>
<line num="113" type="stmt" count="5"/>
<line num="115" type="stmt" count="5"/>
<line num="116" type="stmt" count="0"/>
<line num="118" type="stmt" count="5"/>
<line num="119" type="stmt" count="5"/>
<line num="123" type="stmt" count="6"/>
</file>
<file name="Pattern.php" path="/usr/local/src/raytracer/src/material/Pattern.php">
<metrics loc="56" ncloc="53" classes="1" complexity="8" elements="18" coveredelements="18" conditionals="0" coveredconditionals="0" statements="10" coveredstatements="10" methods="8" coveredmethods="8"/>
<class name="Pattern">
<metrics complexity="8" elements="18" coveredelements="18" conditionals="0" coveredconditionals="0" statements="10" coveredstatements="10" methods="8" coveredmethods="8"/>
</class>
<line num="8" type="method" complexity="1" count="3" signature="checkers(Color $a, Color $b): CheckersPattern" visibility="public"/>
<line num="10" type="stmt" count="3"/>
<line num="13" type="method" complexity="1" count="1" signature="gradient(Color $a, Color $b): GradientPattern" visibility="public"/>
<line num="15" type="stmt" count="1"/>
<line num="18" type="method" complexity="1" count="1" signature="ring(Color $a, Color $b): RingPattern" visibility="public"/>
<line num="20" type="stmt" count="1"/>
<line num="23" type="method" complexity="1" count="3" signature="stripe(Color $a, Color $b): StripePattern" visibility="public"/>
<line num="25" type="stmt" count="3"/>
<line num="28" type="method" complexity="1" count="13" signature="__construct()" visibility="protected"/>
<line num="30" type="stmt" count="13"/>
<line num="33" type="method" complexity="1" count="2" signature="transform(): Matrix" visibility="public"/>
<line num="35" type="stmt" count="2"/>
<line num="38" type="method" complexity="1" count="3" signature="setTransform(Matrix $transform): void" visibility="public"/>
<line num="40" type="stmt" count="3"/>
<line num="46" type="method" complexity="1" count="11" signature="patternAt(Shape $object, Tuple $worldPoint): Color" visibility="public"/>
<line num="48" type="stmt" count="11"/>
<line num="49" type="stmt" count="11"/>
<line num="51" type="stmt" count="11"/>
</file>
<file name="RingPattern.php" path="/usr/local/src/raytracer/src/material/RingPattern.php">
<metrics loc="29" ncloc="29" classes="1" complexity="3" elements="8" coveredelements="8" conditionals="0" coveredconditionals="0" statements="6" coveredstatements="6" methods="2" coveredmethods="2"/>
<class name="RingPattern">
<metrics complexity="3" elements="8" coveredelements="8" conditionals="0" coveredconditionals="0" statements="6" coveredstatements="6" methods="2" coveredmethods="2"/>
</class>
<line num="12" type="method" complexity="1" count="1" signature="__construct(Color $a, Color $b)" visibility="protected"/>
<line num="14" type="stmt" count="1"/>
<line num="15" type="stmt" count="1"/>
<line num="17" type="stmt" count="1"/>
<line num="20" type="method" complexity="2" count="1" signature="localPatternAt(Shape $object, Tuple $point): Color" visibility="public"/>
<line num="22" type="stmt" count="1"/>
<line num="23" type="stmt" count="1"/>
<line num="26" type="stmt" count="1"/>
</file>
<file name="StripePattern.php" path="/usr/local/src/raytracer/src/material/StripePattern.php">
<metrics loc="28" ncloc="28" classes="1" complexity="3" elements="8" coveredelements="8" conditionals="0" coveredconditionals="0" statements="6" coveredstatements="6" methods="2" coveredmethods="2"/>
<class name="StripePattern">
<metrics complexity="3" elements="8" coveredelements="8" conditionals="0" coveredconditionals="0" statements="6" coveredstatements="6" methods="2" coveredmethods="2"/>
</class>
<line num="11" type="method" complexity="1" count="3" signature="__construct(Color $a, Color $b)" visibility="protected"/>
<line num="13" type="stmt" count="3"/>
<line num="14" type="stmt" count="3"/>
<line num="16" type="stmt" count="3"/>
<line num="19" type="method" complexity="2" count="3" signature="localPatternAt(Shape $object, Tuple $point): Color" visibility="public"/>
<line num="21" type="stmt" count="3"/>
<line num="22" type="stmt" count="3"/>
<line num="25" type="stmt" count="1"/>
</file>
<file name="Matrix.php" path="/usr/local/src/raytracer/src/math/Matrix.php">
<metrics loc="260" ncloc="245" classes="1" complexity="48" elements="116" coveredelements="116" conditionals="0" coveredconditionals="0" statements="98" coveredstatements="98" methods="18" coveredmethods="18"/>
<class name="Matrix">
<metrics complexity="48" elements="116" coveredelements="116" conditionals="0" coveredconditionals="0" statements="98" coveredstatements="98" methods="18" coveredmethods="18"/>
</class>
<line num="20" type="method" complexity="1" count="20" signature="fromArray(array $elements): self" visibility="public"/>
<line num="22" type="stmt" count="20"/>
<line num="25" type="method" complexity="4" count="3" signature="identity(int $size): self" visibility="public"/>
<line num="27" type="stmt" count="3"/>
<line num="29" type="stmt" count="3"/>
<line num="30" type="stmt" count="3"/>
<line num="31" type="stmt" count="3"/>
<line num="32" type="stmt" count="3"/>
<line num="34" type="stmt" count="3"/>
<line num="39" type="stmt" count="3"/>
<line num="45" type="method" complexity="1" count="25" signature="__construct(array $elements)" visibility="public"/>
<line num="47" type="stmt" count="25"/>
<line num="49" type="stmt" count="24"/>
<line num="52" type="method" complexity="1" count="15" signature="element(int $i, int $j): float" visibility="public"/>
<line num="54" type="stmt" count="15"/>
<line num="57" type="method" complexity="1" count="24" signature="size(): int" visibility="public"/>
<line num="59" type="stmt" count="24"/>
<line num="62" type="method" complexity="5" count="11" signature="equalTo(self $that, float $delta): bool" visibility="public"/>
<line num="64" type="stmt" count="11"/>
<line num="66" type="stmt" count="11"/>
<line num="67" type="stmt" count="1"/>
<line num="70" type="stmt" count="11"/>
<line num="71" type="stmt" count="11"/>
<line num="72" type="stmt" count="11"/>
<line num="73" type="stmt" count="1"/>
<line num="78" type="stmt" count="11"/>
<line num="81" type="method" complexity="6" count="3" signature="multiply(self $that): self" visibility="public"/>
<line num="83" type="stmt" count="3"/>
<line num="84" type="stmt" count="3"/>
<line num="86" type="stmt" count="3"/>
<line num="87" type="stmt" count="3"/>
<line num="88" type="stmt" count="3"/>
<line num="92" type="stmt" count="3"/>
<line num="93" type="stmt" count="3"/>
<line num="94" type="stmt" count="3"/>
<line num="95" type="stmt" count="3"/>
<line num="100" type="stmt" count="3"/>
<line num="106" type="method" complexity="3" count="2" signature="multiplyBy(Tuple $tuple): Tuple" visibility="public"/>
<line num="108" type="stmt" count="2"/>
<line num="109" type="stmt" count="1"/>
<line num="110" type="stmt" count="1"/>
<line num="111" type="stmt" count="1"/>
<line num="114" type="stmt" count="1"/>
<line num="116" type="stmt" count="1"/>
<line num="117" type="stmt" count="1"/>
<line num="118" type="stmt" count="1"/>
<line num="119" type="stmt" count="1"/>
<line num="120" type="stmt" count="1"/>
<line num="123" type="stmt" count="1"/>
<line num="124" type="stmt" count="1"/>
<line num="125" type="stmt" count="1"/>
<line num="126" type="stmt" count="1"/>
<line num="127" type="stmt" count="1"/>
<line num="128" type="stmt" count="1"/>
<line num="131" type="method" complexity="3" count="4" signature="divideAllElementsBy(float $divisor): self" visibility="public"/>
<line num="133" type="stmt" count="4"/>
<line num="134" type="stmt" count="4"/>
<line num="136" type="stmt" count="4"/>
<line num="137" type="stmt" count="4"/>
<line num="138" type="stmt" count="4"/>
<line num="142" type="stmt" count="4"/>
<line num="145" type="method" complexity="3" count="6" signature="transpose(): self" visibility="public"/>
<line num="147" type="stmt" count="6"/>
<line num="148" type="stmt" count="6"/>
<line num="150" type="stmt" count="6"/>
<line num="151" type="stmt" count="6"/>
<line num="152" type="stmt" count="6"/>
<line num="156" type="stmt" count="6"/>
<line num="159" type="method" complexity="3" count="11" signature="determinant(): float" visibility="public"/>
<line num="161" type="stmt" count="11"/>
<line num="163" type="stmt" count="11"/>
<line num="164" type="stmt" count="11"/>
<line num="165" type="stmt" count="11"/>
<line num="168" type="stmt" count="8"/>
<line num="170" type="stmt" count="8"/>
<line num="171" type="stmt" count="8"/>
<line num="174" type="stmt" count="8"/>
<line num="177" type="method" complexity="6" count="12" signature="submatrix(int $row, int $column): self" visibility="public"/>
<line num="179" type="stmt" count="12"/>
<line num="180" type="stmt" count="12"/>
<line num="181" type="stmt" count="12"/>
<line num="183" type="stmt" count="12"/>
<line num="184" type="stmt" count="12"/>
<line num="185" type="stmt" count="12"/>
<line num="188" type="stmt" count="12"/>
<line num="189" type="stmt" count="12"/>
<line num="190" type="stmt" count="12"/>
<line num="193" type="stmt" count="12"/>
<line num="197" type="stmt" count="12"/>
<line num="198" type="stmt" count="12"/>
<line num="201" type="stmt" count="12"/>
<line num="204" type="method" complexity="1" count="10" signature="minor(int $row, int $column): float" visibility="public"/>
<line num="206" type="stmt" count="10"/>
<line num="209" type="method" complexity="2" count="9" signature="cofactor(int $row, int $column): float" visibility="public"/>
<line num="211" type="stmt" count="9"/>
<line num="213" type="stmt" count="9"/>
<line num="214" type="stmt" count="9"/>
<line num="217" type="stmt" count="9"/>
<line num="220" type="method" complexity="1" count="2" signature="invertible(): bool" visibility="public"/>
<line num="222" type="stmt" count="2"/>
<line num="225" type="method" complexity="1" count="4" signature="inverse(): self" visibility="public"/>
<line num="227" type="stmt" count="4"/>
<line num="233" type="method" complexity="3" count="25" signature="ensureSize(array $elements): void" visibility="private"/>
<line num="235" type="stmt" count="25"/>
<line num="237" type="stmt" count="25"/>
<line num="238" type="stmt" count="25"/>
<line num="239" type="stmt" count="1"/>
<line num="240" type="stmt" count="1"/>
<line num="241" type="stmt" count="1"/>
<line num="246" type="method" complexity="3" count="4" signature="cofactorMatrix(): self" visibility="private"/>
<line num="248" type="stmt" count="4"/>
<line num="249" type="stmt" count="4"/>
<line num="251" type="stmt" count="4"/>
<line num="252" type="stmt" count="4"/>
<line num="253" type="stmt" count="4"/>
<line num="257" type="stmt" count="4"/>
</file>
<file name="Ray.php" path="/usr/local/src/raytracer/src/math/Ray.php">
<metrics loc="49" ncloc="43" classes="1" complexity="6" elements="16" coveredelements="16" conditionals="0" coveredconditionals="0" statements="10" coveredstatements="10" methods="6" coveredmethods="6"/>
<class name="Ray">
<metrics complexity="6" elements="16" coveredelements="16" conditionals="0" coveredconditionals="0" statements="10" coveredstatements="10" methods="6" coveredmethods="6"/>
</class>
<line num="9" type="method" complexity="1" count="4" signature="from(Tuple $origin, Tuple $direction): self" visibility="public"/>
<line num="11" type="stmt" count="4"/>
<line num="14" type="method" complexity="1" count="4" signature="__construct(Tuple $origin, Tuple $direction)" visibility="private"/>
<line num="16" type="stmt" count="4"/>
<line num="17" type="stmt" count="4"/>
<line num="20" type="method" complexity="1" count="3" signature="origin(): Tuple" visibility="public"/>
<line num="22" type="stmt" count="3"/>
<line num="25" type="method" complexity="1" count="3" signature="direction(): Tuple" visibility="public"/>
<line num="27" type="stmt" count="3"/>
<line num="33" type="method" complexity="1" count="1" signature="position(float $t): Tuple" visibility="public"/>
<line num="35" type="stmt" count="1"/>
<line num="41" type="method" complexity="1" count="2" signature="transform(Matrix $m): self" visibility="public"/>
<line num="43" type="stmt" count="2"/>
<line num="44" type="stmt" count="2"/>
<line num="45" type="stmt" count="2"/>
<line num="46" type="stmt" count="2"/>
</file>
<file name="Transformations.php" path="/usr/local/src/raytracer/src/math/Transformations.php">
<metrics loc="103" ncloc="100" classes="1" complexity="7" elements="68" coveredelements="68" conditionals="0" coveredconditionals="0" statements="61" coveredstatements="61" methods="7" coveredmethods="7"/>
<class name="Transformations">
<metrics complexity="7" elements="68" coveredelements="68" conditionals="0" coveredconditionals="0" statements="61" coveredstatements="61" methods="7" coveredmethods="7"/>
</class>
<line num="9" type="method" complexity="1" count="9" signature="translation(float $x, float $y, float $z): Matrix" visibility="public"/>
<line num="11" type="stmt" count="9"/>
<line num="12" type="stmt" count="9"/>
<line num="13" type="stmt" count="9"/>
<line num="14" type="stmt" count="9"/>
<line num="15" type="stmt" count="9"/>
<line num="16" type="stmt" count="9"/>
<line num="17" type="stmt" count="9"/>
<line num="18" type="stmt" count="9"/>
<line num="21" type="method" complexity="1" count="7" signature="scaling(float $x, float $y, float $z): Matrix" visibility="public"/>
<line num="23" type="stmt" count="7"/>
<line num="24" type="stmt" count="7"/>
<line num="25" type="stmt" count="7"/>
<line num="26" type="stmt" count="7"/>
<line num="27" type="stmt" count="7"/>
<line num="28" type="stmt" count="7"/>
<line num="29" type="stmt" count="7"/>
<line num="30" type="stmt" count="7"/>
<line num="33" type="method" complexity="1" count="4" signature="rotationAroundX(float $r): Matrix" visibility="public"/>
<line num="35" type="stmt" count="4"/>
<line num="36" type="stmt" count="4"/>
<line num="37" type="stmt" count="4"/>
<line num="38" type="stmt" count="4"/>
<line num="39" type="stmt" count="4"/>
<line num="40" type="stmt" count="4"/>
<line num="41" type="stmt" count="4"/>
<line num="42" type="stmt" count="4"/>
<line num="45" type="method" complexity="1" count="1" signature="rotationAroundY(float $r): Matrix" visibility="public"/>
<line num="47" type="stmt" count="1"/>
<line num="48" type="stmt" count="1"/>
<line num="49" type="stmt" count="1"/>
<line num="50" type="stmt" count="1"/>
<line num="51" type="stmt" count="1"/>
<line num="52" type="stmt" count="1"/>
<line num="53" type="stmt" count="1"/>
<line num="54" type="stmt" count="1"/>
<line num="57" type="method" complexity="1" count="1" signature="rotationAroundZ(float $r): Matrix" visibility="public"/>
<line num="59" type="stmt" count="1"/>
<line num="60" type="stmt" count="1"/>
<line num="61" type="stmt" count="1"/>
<line num="62" type="stmt" count="1"/>
<line num="63" type="stmt" count="1"/>
<line num="64" type="stmt" count="1"/>
<line num="65" type="stmt" count="1"/>
<line num="66" type="stmt" count="1"/>
<line num="69" type="method" complexity="1" count="6" signature="shearing(float $xy, float $xz, float $yx, float $yz, float $zx, float $zy): Matrix" visibility="public"/>
<line num="71" type="stmt" count="6"/>
<line num="72" type="stmt" count="6"/>
<line num="73" type="stmt" count="6"/>
<line num="74" type="stmt" count="6"/>
<line num="75" type="stmt" count="6"/>
<line num="76" type="stmt" count="6"/>
<line num="77" type="stmt" count="6"/>
<line num="78" type="stmt" count="6"/>
<line num="84" type="method" complexity="1" count="4" signature="view(Tuple $from, Tuple $to, Tuple $up): Matrix" visibility="public"/>
<line num="86" type="stmt" count="4"/>
<line num="87" type="stmt" count="4"/>
<line num="88" type="stmt" count="4"/>
<line num="89" type="stmt" count="4"/>
<line num="91" type="stmt" count="4"/>
<line num="92" type="stmt" count="4"/>
<line num="93" type="stmt" count="4"/>
<line num="94" type="stmt" count="4"/>
<line num="95" type="stmt" count="4"/>
<line num="96" type="stmt" count="4"/>
<line num="97" type="stmt" count="4"/>
<line num="98" type="stmt" count="4"/>
<line num="100" type="stmt" count="4"/>
</file>
<file name="Tuple.php" path="/usr/local/src/raytracer/src/math/Tuple.php">
<metrics loc="174" ncloc="165" classes="1" complexity="24" elements="89" coveredelements="89" conditionals="0" coveredconditionals="0" statements="72" coveredstatements="72" methods="17" coveredmethods="17"/>
<class name="Tuple">
<metrics complexity="24" elements="89" coveredelements="89" conditionals="0" coveredconditionals="0" statements="72" coveredstatements="72" methods="17" coveredmethods="17"/>
</class>
<line num="14" type="method" complexity="1" count="4" signature="from(float $x, float $y, float $z, float $w): self" visibility="public"/>
<line num="16" type="stmt" count="4"/>
<line num="19" type="method" complexity="1" count="7" signature="point(float $x, float $y, float $z): self" visibility="public"/>
<line num="21" type="stmt" count="7"/>
<line num="24" type="method" complexity="1" count="17" signature="vector(float $x, float $y, float $z): self" visibility="public"/>
<line num="26" type="stmt" count="17"/>
<line num="29" type="method" complexity="1" count="25" signature="__construct(float $x, float $y, float $z, float $w)" visibility="private"/>
<line num="31" type="stmt" count="25"/>
<line num="32" type="stmt" count="25"/>
<line num="33" type="stmt" count="25"/>
<line num="34" type="stmt" count="25"/>
<line num="37" type="method" complexity="1" count="10" signature="isPoint(): bool" visibility="public"/>
<line num="39" type="stmt" count="10"/>
<line num="42" type="method" complexity="1" count="9" signature="isVector(): bool" visibility="public"/>
<line num="44" type="stmt" count="9"/>
<line num="50" type="method" complexity="3" count="3" signature="plus(self $that): self" visibility="public"/>
<line num="52" type="stmt" count="3"/>
<line num="53" type="stmt" count="1"/>
<line num="54" type="stmt" count="1"/>
<line num="55" type="stmt" count="1"/>
<line num="58" type="stmt" count="2"/>
<line num="59" type="stmt" count="2"/>
<line num="60" type="stmt" count="2"/>
<line num="61" type="stmt" count="2"/>
<line num="62" type="stmt" count="2"/>
<line num="63" type="stmt" count="2"/>
<line num="69" type="method" complexity="3" count="6" signature="minus(self $that): self" visibility="public"/>
<line num="71" type="stmt" count="6"/>
<line num="72" type="stmt" count="1"/>
<line num="73" type="stmt" count="1"/>
<line num="74" type="stmt" count="1"/>
<line num="77" type="stmt" count="5"/>
<line num="78" type="stmt" count="5"/>
<line num="79" type="stmt" count="5"/>
<line num="80" type="stmt" count="5"/>
<line num="81" type="stmt" count="5"/>
<line num="82" type="stmt" count="5"/>
<line num="85" type="method" complexity="1" count="1" signature="negate(): self" visibility="public"/>
<line num="87" type="stmt" count="1"/>
<line num="88" type="stmt" count="1"/>
<line num="89" type="stmt" count="1"/>
<line num="90" type="stmt" count="1"/>
<line num="91" type="stmt" count="1"/>
<line num="92" type="stmt" count="1"/>
<line num="95" type="method" complexity="1" count="3" signature="multiplyBy(float $factor): self" visibility="public"/>
<line num="97" type="stmt" count="3"/>
<line num="98" type="stmt" count="3"/>
<line num="99" type="stmt" count="3"/>
<line num="100" type="stmt" count="3"/>
<line num="101" type="stmt" count="3"/>
<line num="102" type="stmt" count="3"/>
<line num="105" type="method" complexity="1" count="1" signature="divideBy(float $divisor): self" visibility="public"/>
<line num="107" type="stmt" count="1"/>
<line num="108" type="stmt" count="1"/>
<line num="109" type="stmt" count="1"/>
<line num="110" type="stmt" count="1"/>
<line num="111" type="stmt" count="1"/>
<line num="112" type="stmt" count="1"/>
<line num="115" type="method" complexity="1" count="7" signature="magnitude(): float" visibility="public"/>
<line num="117" type="stmt" count="7"/>
<line num="120" type="method" complexity="1" count="2" signature="normalize(): self" visibility="public"/>
<line num="122" type="stmt" count="2"/>
<line num="124" type="stmt" count="2"/>
<line num="125" type="stmt" count="2"/>
<line num="126" type="stmt" count="2"/>
<line num="127" type="stmt" count="2"/>
<line num="128" type="stmt" count="2"/>
<line num="129" type="stmt" count="2"/>
<line num="132" type="method" complexity="1" count="3" signature="dot(self $that): float" visibility="public"/>
<line num="134" type="stmt" count="3"/>
<line num="135" type="stmt" count="3"/>
<line num="136" type="stmt" count="3"/>
<line num="137" type="stmt" count="3"/>
<line num="140" type="method" complexity="1" count="1" signature="cross(self $that): self" visibility="public"/>
<line num="142" type="stmt" count="1"/>
<line num="143" type="stmt" count="1"/>
<line num="144" type="stmt" count="1"/>
<line num="145" type="stmt" count="1"/>
<line num="146" type="stmt" count="1"/>
<line num="149" type="method" complexity="4" count="3" signature="equalTo(self $that, float $delta): bool" visibility="public"/>
<line num="151" type="stmt" count="3"/>
<line num="152" type="stmt" count="1"/>
<line num="155" type="stmt" count="3"/>
<line num="156" type="stmt" count="1"/>
<line num="159" type="stmt" count="3"/>
<line num="160" type="stmt" count="1"/>
<line num="163" type="stmt" count="3"/>
<line num="169" type="method" complexity="1" count="2" signature="reflect(self $normal): self" visibility="public"/>
<line num="171" type="stmt" count="2"/>
</file>
<file name="Plane.php" path="/usr/local/src/raytracer/src/shapes/Plane.php">
<metrics loc="30" ncloc="27" classes="1" complexity="3" elements="11" coveredelements="11" conditionals="0" coveredconditionals="0" statements="9" coveredstatements="9" methods="2" coveredmethods="2"/>
<class name="Plane">
<metrics complexity="3" elements="11" coveredelements="11" conditionals="0" coveredconditionals="0" statements="9" coveredstatements="9" methods="2" coveredmethods="2"/>
</class>
<line num="11" type="method" complexity="2" count="4" signature="localIntersect(Ray $ray): IntersectionCollection" visibility="public"/>
<line num="13" type="stmt" count="4"/>
<line num="14" type="stmt" count="2"/>
<line num="17" type="stmt" count="2"/>
<line num="18" type="stmt" count="2"/>
<line num="19" type="stmt" count="2"/>
<line num="20" type="stmt" count="2"/>
<line num="21" type="stmt" count="2"/>
<line num="22" type="stmt" count="2"/>
<line num="25" type="method" complexity="1" count="1" signature="localNormalAt(Tuple $point): Tuple" visibility="public"/>
<line num="27" type="stmt" count="1"/>
</file>
<file name="Shape.php" path="/usr/local/src/raytracer/src/shapes/Shape.php">
<metrics loc="74" ncloc="68" classes="1" complexity="9" elements="26" coveredelements="26" conditionals="0" coveredconditionals="0" statements="17" coveredstatements="17" methods="9" coveredmethods="9"/>
<class name="Shape">
<metrics complexity="9" elements="26" coveredelements="26" conditionals="0" coveredconditionals="0" statements="17" coveredstatements="17" methods="9" coveredmethods="9"/>
</class>
<line num="9" type="method" complexity="1" count="24" signature="default(): static" visibility="public"/>
<line num="11" type="stmt" count="24"/>
<line num="12" type="stmt" count="24"/>
<line num="13" type="stmt" count="24"/>
<line num="14" type="stmt" count="24"/>
<line num="17" type="method" complexity="1" count="24" signature="from(Matrix $transform, Material $material): static" visibility="public"/>
<line num="19" type="stmt" count="24"/>
<line num="22" type="method" complexity="1" count="24" signature="__construct(Matrix $transform, Material $material)" visibility="protected"/>
<line num="24" type="stmt" count="24"/>
<line num="25" type="stmt" count="24"/>
<line num="28" type="method" complexity="1" count="2" signature="transform(): Matrix" visibility="public"/>
<line num="30" type="stmt" count="2"/>
<line num="33" type="method" complexity="1" count="5" signature="setTransform(Matrix $transform): void" visibility="public"/>
<line num="35" type="stmt" count="5"/>
<line num="38" type="method" complexity="1" count="2" signature="material(): Material" visibility="public"/>
<line num="40" type="stmt" count="2"/>
<line num="43" type="method" complexity="1" count="1" signature="setMaterial(Material $material): void" visibility="public"/>
<line num="45" type="stmt" count="1"/>
<line num="51" type="method" complexity="1" count="7" signature="intersect(Ray $ray): IntersectionCollection" visibility="public"/>
<line num="53" type="stmt" count="7"/>
<line num="55" type="stmt" count="7"/>
<line num="61" type="method" complexity="1" count="8" signature="normalAt(Tuple $worldPoint): Tuple" visibility="public"/>
<line num="63" type="stmt" count="8"/>
<line num="64" type="stmt" count="8"/>
<line num="65" type="stmt" count="8"/>
<line num="67" type="stmt" count="8"/>
</file>
<file name="ShapeCollection.php" path="/usr/local/src/raytracer/src/shapes/ShapeCollection.php">
<metrics loc="63" ncloc="51" classes="1" complexity="8" elements="16" coveredelements="16" conditionals="0" coveredconditionals="0" statements="9" coveredstatements="9" methods="7" coveredmethods="7"/>
<class name="ShapeCollection">
<metrics complexity="8" elements="16" coveredelements="16" conditionals="0" coveredconditionals="0" statements="9" coveredstatements="9" methods="7" coveredmethods="7"/>
</class>
<line num="18" type="method" complexity="1" count="1" signature="add(Shape $shape): void" visibility="public"/>
<line num="20" type="stmt" count="1"/>
<line num="26" type="method" complexity="1" count="1" signature="asArray(): array" visibility="public"/>
<line num="28" type="stmt" count="1"/>
<line num="34" type="method" complexity="2" count="1" signature="at(int $position): Shape" visibility="public"/>
<line num="36" type="stmt" count="1"/>
<line num="37" type="stmt" count="1"/>
<line num="40" type="stmt" count="1"/>
<line num="43" type="method" complexity="1" count="1" signature="count(): int" visibility="public"/>
<line num="45" type="stmt" count="1"/>
<line num="48" type="method" complexity="1" count="1" signature="isEmpty(): bool" visibility="public"/>
<line num="50" type="stmt" count="1"/>
<line num="53" type="method" complexity="1" count="1" signature="isNotEmpty(): bool" visibility="public"/>
<line num="55" type="stmt" count="1"/>
<line num="58" type="method" complexity="1" count="1" signature="getIterator(): ShapeCollectionIterator" visibility="public"/>
<line num="60" type="stmt" count="1"/>
</file>
<file name="ShapeCollectionIterator.php" path="/usr/local/src/raytracer/src/shapes/ShapeCollectionIterator.php">
<metrics loc="48" ncloc="42" classes="1" complexity="6" elements="12" coveredelements="12" conditionals="0" coveredconditionals="0" statements="6" coveredstatements="6" methods="6" coveredmethods="6"/>
<class name="ShapeCollectionIterator">
<metrics complexity="6" elements="12" coveredelements="12" conditionals="0" coveredconditionals="0" statements="6" coveredstatements="6" methods="6" coveredmethods="6"/>
</class>
<line num="18" type="method" complexity="1" count="1" signature="__construct(ShapeCollection $shapes)" visibility="public"/>
<line num="20" type="stmt" count="1"/>
<line num="23" type="method" complexity="1" count="1" signature="rewind(): void" visibility="public"/>
<line num="25" type="stmt" count="1"/>
<line num="28" type="method" complexity="1" count="1" signature="valid(): bool" visibility="public"/>
<line num="30" type="stmt" count="1"/>
<line num="33" type="method" complexity="1" count="1" signature="key(): int" visibility="public"/>
<line num="35" type="stmt" count="1"/>
<line num="38" type="method" complexity="1" count="1" signature="current(): Shape" visibility="public"/>
<line num="40" type="stmt" count="1"/>
<line num="43" type="method" complexity="1" count="1" signature="next(): void" visibility="public"/>
<line num="45" type="stmt" count="1"/>
</file>
<file name="Sphere.php" path="/usr/local/src/raytracer/src/shapes/Sphere.php">
<metrics loc="49" ncloc="46" classes="1" complexity="5" elements="20" coveredelements="20" conditionals="0" coveredconditionals="0" statements="16" coveredstatements="16" methods="4" coveredmethods="4"/>
<class name="Sphere">
<metrics complexity="5" elements="20" coveredelements="20" conditionals="0" coveredconditionals="0" statements="16" coveredstatements="16" methods="4" coveredmethods="4"/>
</class>
<line num="8" type="method" complexity="1" count="6" signature="origin(): Tuple" visibility="public"/>
<line num="10" type="stmt" count="6"/>
<line num="13" type="method" complexity="1" count="1" signature="radius(): float" visibility="public"/>
<line num="15" type="stmt" count="1"/>
<line num="21" type="method" complexity="2" count="5" signature="localIntersect(Ray $ray): IntersectionCollection" visibility="public"/>
<line num="23" type="stmt" count="5"/>
<line num="25" type="stmt" count="5"/>
<line num="26" type="stmt" count="5"/>
<line num="27" type="stmt" count="5"/>
<line num="29" type="stmt" count="5"/>
<line num="31" type="stmt" count="5"/>
<line num="32" type="stmt" count="1"/>
<line num="35" type="stmt" count="4"/>
<line num="36" type="stmt" count="4"/>
<line num="38" type="stmt" count="4"/>
<line num="39" type="stmt" count="4"/>
<line num="40" type="stmt" count="4"/>
<line num="41" type="stmt" count="4"/>
<line num="44" type="method" complexity="1" count="5" signature="localNormalAt(Tuple $point): Tuple" visibility="public"/>
<line num="46" type="stmt" count="5"/>
</file>
</package>
<package name="global">
<metrics complexity="0" elements="0" coveredelements="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" methods="0" coveredmethods="0"/>
<file name="Exception.php" path="/usr/local/src/raytracer/src/exceptions/Exception.php">
<metrics loc="9" ncloc="9" classes="0" complexity="0" elements="0" coveredelements="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" methods="0" coveredmethods="0"/>
</file>
</package>
</project>
</coverage>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment