Programmer’s guide to homogeneous coordinates
hackernoon.com
hackernoon.com
In that case, your homogeneous coordinates have 3 components, and it's pretty easy to visualize them in 3D space. The z=1 plane is your actual 2D plane. Now consider the set of all lines passing through the 3D origin, those are either parallel to z=1 plane or intersect it at precisely one point. That point of intersection is (x0, y0, 1), and if you multiply by any constant factor, the point just moves along its corresponding line.
Thus, any 3d point with z!=0 can be mapped 1:1 to your 2D plane by simply dividing by z. Points where z = 0 don't map to z=1 plane, they're considered "infinitely far away", and can be used to specify directions on your 2D plane (since they don't get affected by translation!).
Once you wrap your head around the 2D case, it's fairly easy to extend it to 3D.
There isn't anything inherently magical about homogeneous coordinates, it's just a convenient notation for referring to points in space that just happens to lend itself particularly well to affine transforms in that space.
For anyone interested, I highly recommend reading this article: http://deltaorange.com/2012/03/08/the-truth-behind-homogenou...
This is somehow very unsettling to me. (what is the set of operations that can be linearized like this?) I wish I "got it" better
^
|---a
| |
--+--------->
|
^
| ,---a
|/ /
--+--------->
|Things start to get weird when you note that this works even when w isn't 1. If you then decide that e.g. (x,y,w) and (x/w, y/w, 1) should be the same point, you can do some rather interesting things. Although, if you identify (x:y:w) with all the points on the line (lx:ly:lw) (for any l) then suddenly (x/w, y/w, 1) is just the point where this intersects the plane w=1, which isn't too hard to visualize. And if you think about it this also kind of explains why this coordinate system can be used to project a 3D scene onto a 2D surface with correct perspective.
Hang on a minute, let's not get ahead of ourselves. First of all the degenerate surfaces (e.g. (x - w)^n = 0) are clearly different from the other surfaces. Second of all, while you can use simple linear transformations to transform most quadrics into one another, there are two cases where this won't work if you use real numbers. Up to linear isomorphism these are:
X^2 + Y^2 + Z^2 - W^2 = 0
X^2 + Y^2 - Z^2 - W^2 = 0
(to get all degenerate or 'trivial' cases you also need to include equations where some of the coefficients are 0, or all coefficients are the same, see Sylvester's law of inertia for more information).
Admittedly in 2D there is only one interesting case, X^2 + Y^2 - W^2 = 0 (note that this is a cone, hence why all 2D quadrics can be generated by slicing a cone).
And that's just the 2nd order, in higher orders things get complicated quick, although I suppose that in the complex projective plane all surfaces (or rather curves) of the same degree actually are equivalent, albeit only topologically.
Basically:
cross(p1, p2) = line_between_p1_and_p2
cross(line1, line2) = point_of_intersection_of_lines_1_and_2
To understand this you would need to dive a bit into projective space and how lines are represented there, but it is very enlightening.
Wikipedia is good on this stuff if you are patient with mathematician's way of expressing things...
https://en.m.wikipedia.org/wiki/Join_and_meet
https://en.m.wikipedia.org/wiki/Linear_subspace
"Lattice of subspaces
The operations intersection and sum make the set of all subspaces a bounded modular lattice, where the {0} subspace, the least element, is an identity element of the sum operation, and the identical subspace V, the greatest element, is an identity element of the intersection operation."
All the esoteric projection- and 4D-stuff is really not that important compared to the simple feature of allowing to feed positions and directions into the same matrix operations.