Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Problem B: Reflection Vectors (20 points) Suppose you have a ray of light that hits a flat surface such as a mirror and is reflected.

Problem B: Reflection Vectors (20 points) Suppose you have a ray of light that hits a flat surface such as a mirror and is reflected.

What is the direction of reflection?

This is a problem that arises in areas such as optics and computer graphics. To solve it, we need to know the original direction of the light ray, and the orientation of the surface. Let the direction be given by a vector v = (vx,vy,vz), and let the surface orientation be specified by an outward normal vector n = (nx,ny,nz) of the surface.1

To compute the reflection vector we first check if v is heading towards the surface. If it is not, then it will not reflect off the surface. This check is done by using the dot product

vn=vxnx +vyny +vznz.Your first task in this part is to write a function

 double dotProduct(double vx, double vy, double vz, double nx, double ny, double nz) 

that computes the dot product. If the dot product is greater than or equal to zero, the ray of light is headed away from (or parallel to) the surface, and so no reflection occurs.

So we only compute the reflection vector if the dot product is less than zero. In this case, the next step is to normalize the surface normal vector by dividing each component by the vectors length;2 this ensures the resulting vector has unit length. Write a function

1A normal of a flat surface is a vector perpendicular to the surface. An outward normal is any such vector pointing outward from the surface object rather than inward.

2Recall the length of a 3D vector w is given by | w | = ?? w x2 + w y2 + w z2 .

3

 void normalize(double& wx, double& wy, double& wz) 

that, given any vector (wx,wy,wz), computes its length, divides each component by that length, and then uses call by reference to return those components.

The final step is to use the formula

r = v ? 2(v n)n to compute the reflection vector. Here n is the normalized vector from the last step. Write

a function

 void reflectionVector(double vx, double vy, double vz, double nx, double ny, double nz, 
 double& rx, double& ry, double& rz) 

that does the following: (i) takes the original surface normal vector n and normalizes it using the normalize function, (ii) computes the reflection vector r = (rx,ry,rz) (note to do this the formula above needs to be applied three times: once for each of the x, y, and zcomponents; also note that computing the reflection vector requires use of the dotProductfunction), and (iii) uses call by reference to return the reflection vector components.

Finally, write a main program that does the following:

Asks the user to input the original direction, and then input the surface outward normal.

Checks if reflection occurs. To do this it should use the dotProduct function.

If reflection does not occur, your main program should print out an appropriate mes- sage. If reflection does occur, your main program should call the reflectionVectorfunction to compute the reflection vector, and should print out that vector.

In either case, your main program should then ask the user if they wish to continue. If they do, the program should allow the user to continue this process as many times as they wish.

Here is some example input and output.

Input the original direction vx vy vz: 0 -1 0 Input the surface outward normal nx ny nz: 1 1 0 Reflection vector: 1 -2.22045e-16 0 Continue (y/n)? y Input the original direction vx vy vz: 1.5 2.5 3.5 Input the surface outward normal nx ny nz: 1 1 1 No reflection Continue (y/n)? y Input the original direction vx vy vz: 1.5 2.5 3.5 Input the surface outward normal nx ny nz: -1 -1 1 Reflection vector: 1.16667 2.16667 3.83333 

4

(Note that in the first test case here the y component of the reflection vector is slightly different from the correct value of 0. This is due to round-off error.) As usual, make sure you follow the input and output formatting shown in the example.

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image_2

Step: 3

blur-text-image_3

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Database Fundamentals Study Guide

Authors: Dr. Sergio Pisano

1st Edition

B09K1WW84J, 979-8985115307

More Books

Students also viewed these Databases questions