CSC418/2504F: Fall 2002 Assignment 2
Due: Wed. Nov. 6, 2002 in class.  
  - Transformations [4 marks] Consider the following 
  2-dimensional coordinate frames A and B and C.    
 
    - [2 mark] What are the coordinates of point P in frames A, B and C? 
    
- [2 marks] What is the 3x3 homogeneous matrix MBC that, when 
    multiplied by a point in frame B, yields that point's coefficients in frame 
    C? 
   
- Modeling [6 marks] A square pyramid is shown below. 
     
    - [4 mark] Give the transformations necessary to create a solid cube made 
    up of six pyramids.  You can assume that the six initial pyramids all 
    start in the same location given above.  Use simple notation like 
    rot(z,45) (counterclockwise rotation around z-axis by 45 degrees) and trans(2,3,4) 
    (here 2, 3 and 4 correspond to translation in the x, y and z directions) to indicate the transformations .  Write the 
    set of transformation, in the right order, that each of the pyramids must be 
    multiplied by.
- [2 marks] What are the outward-facing unit normal 
    vectors for face EDC and vertex B? 
   
- Ray Tracing (8 marks)
 In ray tracing, primary rays are shot from the eye, through pixels, and tested 
  for intersection with objects. Write a program to intersect a primary ray with 
  an axis aligned ellipsoid, defined by the center C=<Cx,Cy,Cz> and radii 
  a,b,c, along the three axes XYZ. The equation of such an ellipsoid is (x-Cx)^2/a^2+(y-Cy)^2/b^2+(z-Cz)^2/c^2=1 
  The parametric form of a ray
 starting at P, in direction V is (x,y,z) = P + t V , t>0.
 Your program must read input from stdin in the example form....
 0.5 1.6 2.7
 
 2 4 7
 
 8.3 9.1 -0.3
 
 6.0 5.2 8.9
 where the ray is defined by the its origin <0.5 1.6 2.7> and direction <2 4 7> 
  and the ellipsoid by center <8.3 9.1 -0.3> and radii along axes XYZ as 6.0, 
  5.2, 8.9 respectively.
 
 The program should ouput the first intersection point to stdout if there is an 
  intersection and "no intersection" if there is no intersection between the ray 
  and the primitive.
 
 Submit your code electronically, using one of the following commands:
 
 submit -N a2q3 csc418h intersect.c
 submit -N a2q3 csc2504h intersect.c
 Submit a printed copy as well.
 
- Graphics pipeline [3 marks] A classic Hitchcock camera trick in the 
  film Vertigo was to dolly the camera away from a scene, yet preserve the film 
  size of objects by simultaneously zooming (changing the focal length) the 
  camera. This is shown below. x is the original distance between the 
  camera viewpoint and the object. f is the original focal length or 
  distance between the camera's viewpoint and its image plane. d is the 
  distance the camera is dollied back and z is the change in focal length 
  of the camera so that the object remains the same size on the image plane. 
  Write z as a function of d, f, and x.

 
  - Hierarchies [9 marks] Write a program to draw and control the 
  four joint snake shown below.  The snakes movement is limited to the 
  plane.  The snake is anchored at one end, but can 
  freely rotate each of its four joints.  When the user clicks on a point, the snake should move so that 
  its "head" is touching the point.  If the point is out of reach, the 
  snake's head should point in the direction of the point.
      
 
    - [1 mark]  Draw the snake using four cuboids.
- [3 marks] The user should be able to click on 
    a point outside of the snake's reach.  A red marker should be displayed 
    at this point.  The snake should point towards the marker, as shown in 
    the first figure above.  Simply adjust the first joint (theta 1) to 
    point the snake at the marker and keep every other joint at zero degrees.  Each time the user clicks, the snake should move 
    so that it points at the new point.  (Display a marker where the 
    last click was made.)  NOTE: you do not need to animate the snake's 
    movement for parts B and C.  It is acceptable to simply redraw the 
    snake in the new configuration when the user clicks at a new location.  
    This is equivalent to the snake moving instantaneously to the new 
    configuration.  Only one snake should ever be displayed.
- [5 marks] Do the same as in part b, but deal with 
    any points within the snake's reach.  Have the snake touch the marker 
    with its "nose".  This is the case shown in the second figure.  It 
    can be assumed that all targets will be above the line.  Choose joint 
    angles so that the snake maintains a natural shape (2 marks).  
    Quantitatively, try to minimize the variation in angles theta 2 through 
    theta 4  (i.e. try to set them to have the same value.).  Theta 1 
    can be freely varied. NOTE: as in part b, the transition to the new 
    configuration of the snake does not need to be animated.  It is 
    sufficient to simply redraw the snake in the new pose.
- [3 marks] EXTRA CREDIT : 
    Animate it!  Interpolate the joint angles to animate the 
    snake from its current position to its new position as defined in part b or 
    c.  Achieve a transition time of two seconds. 
 Submit your code electronically, using one of the following 
  commands: 
   
    - submit -N a2q5 csc418h snake.cpp ui.cpp
- submit -N a2q5 csc2504h snake.cpp ui.cpp
 Submit a 
  printed copy as well.
Sample code is available at:
http://www.dgp.toronto.edu/~neff/teaching/418/a2/code/