Skip to content

Commit 2aea643

Browse files
committed
Refactor pdf.h for readability
1 parent ca843b1 commit 2aea643

File tree

2 files changed

+28
-9
lines changed

2 files changed

+28
-9
lines changed

books/RayTracingTheRestOfYourLife.html

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1089,19 +1089,23 @@
10891089
auto r1 = random_double();
10901090
auto r2 = random_double();
10911091
auto z = sqrt(1-r2);
1092+
10921093
auto phi = 2*pi*r1;
10931094
auto x = cos(phi)*sqrt(r2);
10941095
auto y = sin(phi)*sqrt(r2);
1096+
10951097
return vec3(x, y, z);
10961098
}
10971099

10981100
int main() {
10991101
int N = 1000000;
1102+
11001103
auto sum = 0.0;
11011104
for (int i = 0; i < N; i++) {
11021105
vec3 v = random_cosine_direction();
11031106
sum += v.z()*v.z()*v.z() / (v.z()/pi);
11041107
}
1108+
11051109
std::cout << std::fixed << std::setprecision(12);
11061110
std::cout << "Pi/2 = " << pi/2 << '\n';
11071111
std::cout << "Estimate = " << sum/N << '\n';
@@ -1433,6 +1437,8 @@
14331437
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
14341438
class pdf {
14351439
public:
1440+
virtual ~pdf() {}
1441+
14361442
virtual double value(const vec3& direction) const = 0;
14371443
virtual vec3 generate() const = 0;
14381444
};
@@ -1449,16 +1455,25 @@
14491455
First, let’s try a cosine density:
14501456

14511457
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
1458+
inline vec3 random_cosine_direction() {
1459+
auto r1 = random_double();
1460+
auto r2 = random_double();
1461+
auto z = sqrt(1-r2);
1462+
1463+
auto phi = 2*pi*r1;
1464+
auto x = cos(phi)*sqrt(r2);
1465+
auto y = sin(phi)*sqrt(r2);
1466+
1467+
return vec3(x, y, z);
1468+
}
1469+
14521470
class cosine_pdf : public pdf {
14531471
public:
14541472
cosine_pdf(const vec3& w) { uvw.build_from_w(w); }
14551473

14561474
virtual double value(const vec3& direction) const {
14571475
auto cosine = dot(unit_vector(direction), uvw.w());
1458-
if (cosine > 0)
1459-
return cosine/pi;
1460-
else
1461-
return 0;
1476+
return (cosine <= 0) ? 0 : cosine/pi;
14621477
}
14631478

14641479
virtual vec3 generate() const {
@@ -2168,9 +2183,11 @@
21682183
auto r1 = random_double();
21692184
auto r2 = random_double();
21702185
auto z = 1 + r2*(sqrt(1-radius*radius/distance_squared) - 1);
2186+
21712187
auto phi = 2*pi*r1;
21722188
auto x = cos(phi)*sqrt(1-z*z);
21732189
auto y = sin(phi)*sqrt(1-z*z);
2190+
21742191
return vec3(x, y, z);
21752192
}
21762193
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

src/TheRestOfYourLife/pdf.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@ inline vec3 random_cosine_direction() {
1919
auto r1 = random_double();
2020
auto r2 = random_double();
2121
auto z = sqrt(1-r2);
22+
2223
auto phi = 2*pi*r1;
2324
auto x = cos(phi)*sqrt(r2);
2425
auto y = sin(phi)*sqrt(r2);
26+
2527
return vec3(x, y, z);
2628
}
2729

@@ -30,18 +32,21 @@ inline vec3 random_to_sphere(double radius, double distance_squared) {
3032
auto r1 = random_double();
3133
auto r2 = random_double();
3234
auto z = 1 + r2*(sqrt(1-radius*radius/distance_squared) - 1);
35+
3336
auto phi = 2*pi*r1;
3437
auto x = cos(phi)*sqrt(1-z*z);
3538
auto y = sin(phi)*sqrt(1-z*z);
39+
3640
return vec3(x, y, z);
3741
}
3842

3943

4044
class pdf {
4145
public:
46+
virtual ~pdf() {}
47+
4248
virtual double value(const vec3& direction) const = 0;
4349
virtual vec3 generate() const = 0;
44-
virtual ~pdf() {}
4550
};
4651

4752

@@ -51,10 +56,7 @@ class cosine_pdf : public pdf {
5156

5257
virtual double value(const vec3& direction) const {
5358
auto cosine = dot(unit_vector(direction), uvw.w());
54-
if (cosine > 0)
55-
return cosine/pi;
56-
else
57-
return 0;
59+
return (cosine <= 0) ? 0 : cosine/pi;
5860
}
5961

6062
virtual vec3 generate() const {

0 commit comments

Comments
 (0)