diff options
author | Keuin <[email protected]> | 2022-04-16 14:30:48 +0800 |
---|---|---|
committer | Keuin <[email protected]> | 2022-04-16 14:30:48 +0800 |
commit | bac87e9c4c61a69c5d315f331031d0745ee9d8d2 (patch) | |
tree | 7d7093b3517b9c4956b80632a48a1ab608d47f96 | |
parent | 8d39a453c515b18cd10079ec4b7e45f315f466da (diff) |
Add object::is_on to check whether a point is on the object's surface.
-rw-r--r-- | object.h | 3 | ||||
-rw-r--r-- | sphere.h | 4 |
2 files changed, 7 insertions, 0 deletions
@@ -28,6 +28,9 @@ public: return hit(r, t, t1, std::numeric_limits<double>::infinity()); } + // If given position is on the object's surface. + virtual bool is_on(const vec3d &p) const = 0; + // Given a point on the surface, returns the normalized outer normal vector on that point. virtual vec3d normal_vector(const vec3d &where) const = 0; @@ -81,6 +81,10 @@ public: return hit; } + bool is_on(const vec3d &p) const override { + return ((p - center).mod2() - radius * radius) < 1e-10; + } + pixel8b color() const override { return pixel8b::from_normalized(1.0, 0.0, 0.0); } |