I How Do You Reverse a 2.5D Projection Function in Programming?

newjerseyrunner
Messages
1,532
Reaction score
637
I have this function that I need to reverse.

int getYPosition(float height, float dist) const {
const float hh = renderer -> viewPortHalfH / dist;
return renderer -> viewPortHalfH - hh + hh * ((height + renderer -> player -> verticalAngle * dist) / 128.0f);
}

float getDistYPosition(float height, int yPosition) const {
//wtf, I can't figure out what this should be
return 1;
}

I can't figure out how to reverse it though, I should be able to take the resulting int, put it through a function with the height value and get back distance. Normally, when I get stuck, I just ask wolfram alpha to solve it for me, but that doesn't seem to be giving me an answer.

y = k - (k/d) + (k/d) * ((h + v * d) / 128) solve d
Is there something with my equation that makes it fundamentally irreversible?

I feel like wolfram alpha is having trouble because the general equation has some quirks that the actual code won't? Like the fact that both renderer -> viewPortHalfH and dist are always positive and non-zero. How would I tell wolfram alpha about this (would it even help?)
 
Mathematics news on Phys.org
Are you trying to implement the Pythagorean distance here?
 
y = k - (k/d) + (k/d) * ((h + v * d) / 128)
Multiply the equation by d and you get a standard linear equation which you can solve for d.
 
  • Like
Likes newjerseyrunner
jedishrfu said:
Are you trying to implement the Pythagorean distance here?
No. I'm not sure what it's called. The first function projects a 2.5D point to a 2D screen, I'm trying to reverse the projection. I don't know x or y position, in fact, I need this distance calculation to figure that out in order to texture it.
Screen Shot 2020-09-22 at 10.28.55 PM.pngIt's for determining distance from a camera across the floor. I knew the distance of the bottom of the wall, and I knew what pixel height it started at. I then need to iterate along each pixel going down and figure out it's distance from the camera.

mfb said:
Multiply the equation by d and you get a standard linear equation which you can solve for d.
That was the step I needed, I was able to figure out the algorithm from there

float yPositionToDist(float height, int pixel) const {
float top = (height - 128.0f) * renderer -> viewPortHalfH;
float bottom = (renderer -> player -> verticalAngle + 128.0f) * renderer -> viewPortHalfH - 128.0f * (float)pixel;
return -top / bottom;
 
  • Like
Likes jedishrfu
Insights auto threads is broken atm, so I'm manually creating these for new Insight articles. In Dirac’s Principles of Quantum Mechanics published in 1930 he introduced a “convenient notation” he referred to as a “delta function” which he treated as a continuum analog to the discrete Kronecker delta. The Kronecker delta is simply the indexed components of the identity operator in matrix algebra Source: https://www.physicsforums.com/insights/what-exactly-is-diracs-delta-function/ by...
Fermat's Last Theorem has long been one of the most famous mathematical problems, and is now one of the most famous theorems. It simply states that the equation $$ a^n+b^n=c^n $$ has no solutions with positive integers if ##n>2.## It was named after Pierre de Fermat (1607-1665). The problem itself stems from the book Arithmetica by Diophantus of Alexandria. It gained popularity because Fermat noted in his copy "Cubum autem in duos cubos, aut quadratoquadratum in duos quadratoquadratos, et...
I'm interested to know whether the equation $$1 = 2 - \frac{1}{2 - \frac{1}{2 - \cdots}}$$ is true or not. It can be shown easily that if the continued fraction converges, it cannot converge to anything else than 1. It seems that if the continued fraction converges, the convergence is very slow. The apparent slowness of the convergence makes it difficult to estimate the presence of true convergence numerically. At the moment I don't know whether this converges or not.
Back
Top