| // @dart=2.8 |
| // The ray tracer code in this file is written by Adam Burmister. It |
| // is available in its original form from: |
| // |
| // http://labs.flog.co.nz/raytracer/ |
| // |
| // Ported from the v8 benchmark suite by Google 2012. |
| part of ray_trace; |
| |
| class Vector { |
| double x, y, z; |
| Vector(this.x, this.y, this.z); |
| |
| void copy(Vector v) { |
| x = v.x; |
| y = v.y; |
| z = v.z; |
| } |
| |
| Vector normalize() { |
| var m = magnitude(); |
| return Vector(x / m, y / m, z / m); |
| } |
| |
| double magnitude() { |
| return sqrt((x * x) + (y * y) + (z * z)); |
| } |
| |
| Vector cross(Vector w) { |
| return Vector(-z * w.y + y * w.z, z * w.x - x * w.z, -y * w.x + x * w.y); |
| } |
| |
| double dot(Vector w) { |
| return x * w.x + y * w.y + z * w.z; |
| } |
| |
| Vector operator +(Vector w) { |
| return Vector(w.x + x, w.y + y, w.z + z); |
| } |
| |
| Vector operator -(Vector w) { |
| return Vector(x - w.x, y - w.y, z - w.z); |
| } |
| |
| Vector operator *(Vector w) { |
| return Vector(x * w.x, y * w.y, z * w.z); |
| } |
| |
| Vector multiplyScalar(double w) { |
| return Vector(x * w, y * w, z * w); |
| } |
| |
| @override |
| String toString() { |
| return 'Vector [$x, $y ,$z ]'; |
| } |
| } |