Reflection

Reflection Point {PxQ,PyQ}

{Sx, Sy}, {PRxQ, PRyQ}, {InxQ, InyQ}

Reflection Screen

{RAxQ, RAyQ}, {RBxQ, RByQ}

TE : (x - PRxQ)/(RAxQ - RBxQ) == (y - PRyQ)/(RAyQ - RByQ)

NE : (x - PRxQ)/(RAyQ - RByQ) == -((y - PRyQ)/(RAxQ - RBxQ))

x/.Solve[(x - PRxQ)/(RAyQ - RByQ) == -((-PRyQ)/(RAxQ - RBxQ)), x][[1]]//InputForm

(PRxQ * RAxQ + PRyQ * RAyQ - PRxQ * RBxQ - PRyQ * RByQ)/(RAxQ - RBxQ)

{NnxQ, NnyQ} = {(PRxQ * RAxQ + PRyQ * RAyQ - PRxQ * RBxQ - PRyQ * RByQ)/(RAxQ - RBxQ), 0}

{a0, b0} = {Sx - PRxQ, Sy - PRyQ} ;

{a1, b1} = {NnxQ - PRxQ, NnyQ - PRyQ} ;

{a2, b2} = {InxQ - PRxQ, InyQ - PRyQ} ;

γ = 2β - α = 2ArcTan[a1, b1] - ArcTan[a0, b0] = ArcTan[a2, b2] ;

2ArcTan[RAyQ - RByQ, RBxQ - RAxQ] - ArcTan[Sx - PRxQ, Sy - PRyQ]

Reflection Equation

y == Tan[2ArcTan[RAyQ - RByQ, RBxQ - RAxQ] - ArcTan[Sx - PRxQ, Sy - PRyQ]] (x - PRxQ) + PRyQ

x = PRxQ + Dist * Cos[2ArcTan[RAyQ - RByQ, RBxQ - RAxQ] - ArcTan[Sx - PRxQ, Sy - PRyQ]] ;

y = PRyQ + Dist * Sin[2ArcTan[RAyQ - RByQ, RBxQ - RAxQ] - ArcTan[Sx - PRxQ, Sy - PRyQ]] ;

View Live

Screen& Point

RQ = ArcTan[RAx - RBx, RAy - RBy] ;

RD = (Rx - RAx) * Cos[RQ] + (Ry - RAy) * Sin[RQ] ;

{Rx, Ry} = {RAx + RD * Cos[RQ], RAy + RD * Sin[RQ]} ;

Reflection Angle

FQ = 2ArcTan[RAy - RBy, RBx - RAx] - ArcTan[Sx - Rx, Sy - Ry] ;

FD = (Ox - Rx) * Cos[FQ] + (Oy - Ry) * Sin[FQ] ;

{Ox, Oy} = {Rx + FD * Cos[FQ], Ry + FD * Sin[FQ]} ;

View

Screen& Point

Point[{RAx, RAy, 0}]

Point[{RBx, RBy, 0}]

Line[{{RAx, RAy, 0}, {RBx, RBy, 0}}] ;

Beam & Ray

Point[{Sx, Sy, 0}]

Point[{Rx, Ry, 0}]

Point[{Ox, Oy, 0}]

Line[{{Sx, Sy, 0}, {Rx, Ry, 0}, {Ox, Oy, 0}}]