# How do I compute a mirror surface

This topic is 3826 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

I am trying to figure out how to compute a mirror surface. Initially I want to focus on the 2d case. Imagine having parallel light streaming in from your left, and you have a focuspoint directly above. X ----------/ ---------/ --------/ ------/ ----/ How do one compute a function that will focus the light in the point X. Initially I would make a drawing starting from top or bottom, figuring out the needed angle for that point. Then I would take a step along the mirror function and compute a new angle. But the problem is that the shape changes with the size of the steps I am doing. Any ideas?

##### Share on other sites
I just made a sketch to support the problem.

##### Share on other sites
Your problem looks a lot like the problem physics simulations have with accelleration (less steps being less accurate, and the errors accumulating over time). I'll look for an article on that now i have posted here anyway :P.

edit:
You are probably calculating the next point of the mirror relative to the current part. If you calculate the absolute x and y values using the function, the shape should not change at all, but just become less smooth.

If absolute values is not an option, you could look at techniques like the Time-Corrected Verlet Integration described here, or other physics simulation related methods.

[Edited by - Tree Penguin on June 20, 2008 9:57:48 AM]

##### Share on other sites
Hi there,

Note: I used -- instead of plus, because plus does not seem to work on this forum, or at least not in my preview.

I remember from high school math that when lines fall parallel from above into a parabola, they will all reflect through the focus point (http://en.wikipedia.org/wiki/Parabola). I looked it up, and i found the following:

for a parabola y = 1/(4*c)*x^2 the focus point is F( 0 , c ) (c is a constant)

Lets assume the following: We have a focus point F( fx , fy ) and a point P( px , py ) on the surface. Further we assume the light comes parallel from above. We want to define the parabola a*(x-b)^2 -- c = y, that is, we want to find the constants a, b and c, such that all light is reflected in the parabola through F.

We know that, for our parabola, the focus will be [ b , 1 / (4*a) -- c ]. So we need to fix the surface through P and the focus at F. The equations we have to satisfy are:

fx = b
fy = 1 / (4*a) -- c
py = a*(px-b)^2 -- c

=>

py = a*(px-fx)^2 -- c

=>

4*(Px-Fx)*a^2 -- 4*(Fy - Py)*a - 1 = 0 (Can be solved for a with Quadratic (or ABC) Formula )

Having a, we can solve for c, and we already knew b, so everything together:

a = (-4*(Fy - Py) --/- sqrt( 16*(Fy - Py)^2 -- 16*(Px-Fx) )) / (8*(Px-Fx))
b = fx
c = fy - 1 / (4*a)

Well, its a lot of algebra, so don't hate me if I made an error, just follow the wiki-page and you should come somewhere near what I did. The actual surface can of course be reconstructed using the final parabola and using forward difference or something. I assumed you wanted your surface through a point P, because otherwise you have infinite many solutions.

succes!

##### Share on other sites
Thanx that was quick

I have to brush up on my algebra over the weekend though to understand it.

Thanx :)

##### Share on other sites
Thats great. I read about the parabola on Wikipedia and I think I get it. Although I do not master the algebra yet.

The reason I am doing this is that I want to carve a mirror surface using a CNC milling machine.

I can now write a C program that will drive my drill along the surface. I just have one problem. The function i need to move along is offset by the radius of my circular cutting head.

Would you happen to know how I would go about offsetting the function by a circle.

I guess it would give me two sulutions, but I have no clue on how to do the offset mathwise.

Sorry bout all the questions :)

1. 1
2. 2
Rutin
16
3. 3
4. 4
5. 5

• 26
• 11
• 9
• 9
• 11
• ### Forum Statistics

• Total Topics
633710
• Total Posts
3013482
×

## Important Information

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!