diff options
Diffstat (limited to 'perspective.txt')
-rw-r--r-- | perspective.txt | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/perspective.txt b/perspective.txt new file mode 100644 index 0000000..a9bc097 --- /dev/null +++ b/perspective.txt @@ -0,0 +1,38 @@ +fx = rx / rw +fy = ry / rw + +fx = f0x + u * (flx - f0x + v * (frx - flx)) +fy = f0y + u * (fly - f0y + v * (fry - fly)) +fz = f0z + u * (flz - f0z + v * (frz - flz)) + +rx = r0x + s * (rlx - r0x + t * (rrx - rlx)) +ry = r0y + s * (rly - r0y + t * (rry - rly)) +rz = r0z + s * (rlz - r0z + t * (rrz - rlz)) + +rx = r0x + s * rlx - s * r0x + s * t * rrx - s * t * rlx + = (1 - s) * r0x + s * ((1 - t) * rlx + t * rrx) +<=> s = (rx - r0x) / ((1 - t) * rlx + t * rrx - r0x) + +s = (rx - r0x) / ((1 - t) * rlx + t * rrx - r0x) +s = (ry - r0y) / ((1 - t) * rly + t * rry - r0y) +s = (rz - r0z) / ((1 - t) * rlz + t * rrz - r0z) + +s = (rx - r0x) / (tlx + t * (rrx - rlx) - r0x) +s = (ry - r0y) / ((1 - t) * tly + t * rry - r0y) +s = (rz - r0z) / ((1 - t) * tlz + t * rrz - r0z) + +# ry = (1 - s) * r0y + s * ((1 - t) * rly + t * rry) +# <=> (ry - (1 - s) * r0y) / s = (1 - t) * rly + t * rry +# <=> t = ((ry - (1 - s) * r0y) / s - rly) / (rry - rly) +# = ((ry - r0y + s * r0y) / s - rly) / (rry - rly) +# = ((ry - r0y) / s + r0y - rly) / (rry - rly) +# = (ry - r0y) / (s * (rry - rly)) + (r0y - rly) / (rry - rly) +# = (ry - r0y) / ((rx - r0x) / ((1 - t) * tlx + t * rrx - r0x) * (rry - rly)) + (r0y - rly) / (rry - rly) + +ry = r0y + s * (rly - r0y + t * (rry - rly)) + = r0y + ((rx - r0x) / ((1 - t) * tlx + t * rrx - r0x)) * (rly - r0y + t * (rry - rly)) + + a = (1 - k) * x + k * y + = x + k * (y - x) +<=> a - x = k * (y - x) +<=> k = (a - x) / (y - x) |