Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

A Project img on X-Y surface to a cylinder placed in center...

  1. Mar 7, 2016 #1
    Hi ,
    I came across a problem ,I've search a lot but couldn't exactly find the solution.
    here is my problem:
    suppose there is an image ( I call it IMG_A),place IMG_A in the X-Y plane , put a mirror cylinder at the center of IMG_A. what we see in the cylinder mirror is a deform image (I call it IMG_B) . what I try to achieve by this program is IMG_B.
    I've already write a piece of code in Matlab using this equation

    for i=1:IMG_A_Width
    for j=1:IMG_A_Height
    cy(i,j,1)=cyradius*cos(i*(2*pi/IMG_A_Width)) ;%cylinder X
    cy(i,j,2)=cyradius*(sin(i*(2*pi/IMG_A_Width)));%cylinder Y
    cy(i,j,3)=j*(cyHeight/IMG_A_Height) ;%cylinder Z
    cy(i,j,4)=IMG_A(i,j);%cylinder image
    but this is not exactly what I want ,this program just wrap the IMG_A around the cylinder. in other words the warping is in the horizontal direction.

    would you please be kind enough helping me to understand the equation I need to write this program?
  2. jcsd
  3. Mar 7, 2016 #2


    User Avatar
    2017 Award

    Staff: Mentor

    Before you start writing code: how do you look into the mirror? That will influence the picture you see.
    Try to solve the problem for some random viewing direction, by working against the direction of the light: where does your viewing direction hit the mirror? Where is the reflected viewing direction, and where does it hit the xy plane?
  4. Mar 7, 2016 #3
    fortunately the viewing angel is constant and it is 30 degrees.
    [the light will travel at the angel of 30 degrees from XY plane and hit the mirror ]
  5. Mar 8, 2016 #4
    That sounds like a ray-tracing problem in computer graphics.

    You want to think in terms of eye-rays and parametric coordinates with planes (your image) and cylinders (the deformed image)
    You have the starting point (Vs) for each ray (where the eye is) and the direction (unit vector Vd) where that ray goes.
    The first place that rays hits anything gives a parametric coordinate u. Each point and vector is three components (x,y,z)

    R = Vs + u.Vd

    A plane is defined as P = A.x + B.y + C.z + D = 0

    A cylinder is defined as C = A.x^2 + B.y^2

    You want to intersect your ray R with the cylinder, calculate the reflection vector of that ray, and where the reflected vector hits the plane.

    Here's some reference material:
  6. Mar 9, 2016 #5
    I would just add to #4 that a natural way to do this is pixel by pixel. For each pixel, you want to know how to color it. Calculating where the ray from the eye through the center of the pixel, after being reflected by the cylinder, hits the plane — if it hits the plane at all — will determine what color the pixel should be. For more realism you might want to decrease the intensity of that color in proportion to the squared length of the entire light ray (i.e., from the eye to the cylinder to the plane).
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook

Have something to add?
Draft saved Draft deleted