Analytická geometrie: Odraz světla

Světelný paprsek prochází bodem A=[-3; 4], odraží se od zrcadla, které leží na přímce dané rovnicí x+y+1=0, a dopadá do bodu B=[2; 0]. Napište rovnici přímky, na níž leží dopadající paprsek, a rovnici přímky, na níž leží odražený paprsek.

© Jaroslav Reichl, 2013

bodA={-3,4};
bodB={2,0};
nvektorp={1,1};
cprimkyp=1;

xmin=-6;xmax=4;
ymin=-2;ymax=5;
delta=0.03(xmax-xmin);

tloustka=0.007;
velikostpisma=18;
velikostbodu=0.025;
barva=Black;
barvap=Blue;
barvak=Black;
barvaAB=Magenta;
barvaAP=Red;
barvaboduA=Red;
barvaboduB=Magenta;
barvaboduS=Black;
barvaboduP=Black;

primka[a_,b_,c_,x_,y_]:=a x+b y+c;

bodpopisupx=xmin+1.5;
reseni=Solve[primka[nvektorp[[1]],nvektorp[[2]],cprimkyp,bodpopisupx,y]==0,y];
bodpopisupy=y/.reseni[[1]];
bodpopisukx=xmin+0.35;
reseni=Solve[primka[nvektorp[[2]],-nvektorp[[1]],-nvektorp[[2]] bodA[[1]]+nvektorp[[1]] bodA[[2]],bodpopisukx,y]==0,y];
bodpopisuky=y/.reseni[[1]];

primkap=primka[nvektorp[[1]],nvektorp[[2]],cprimkyp,x,y];
kolmice=primka[nvektorp[[2]],-nvektorp[[1]],-nvektorp[[2]] bodA[[1]]+nvektorp[[1]] bodA[[2]],x,y];
reseni=Solve[{primkap==0,kolmice==0},{x,y}];
pomstredx=x/.reseni[[1,1]];
pomstredy=y/.reseni[[1,2]];
bodA1=2{pomstredx,pomstredy}-bodA;

primkaA1B=primka[bodB[[2]]-bodA1[[2]],-(bodB[[1]]-bodA1[[1]]),-(bodB[[2]]-bodA1[[2]])bodA1[[1]]+(bodB[[1]]-bodA1[[1]])bodA1[[2]],x,y];
reseni=Solve[{primkap==0,primkaA1B==0},{x,y}];
prusecikx=x/.reseni[[1,1]];
pruseciky=y/.reseni[[1,2]];

primkaAP=primka[pruseciky-bodA[[2]],-(prusecikx-bodA[[1]]),-(pruseciky-bodA[[2]])bodA[[1]]+(prusecikx-bodA[[1]])bodA[[2]],x,y];

Show[
ContourPlot[primkap==0,{x,xmin,xmax},{y,ymin,ymax},
ContourStyle->{Thick,barvap}],
ContourPlot[kolmice==0,{x,xmin,xmax},{y,ymin,ymax},
ContourStyle->{Thick,barvak,Dashed}],
ContourPlot[primkaA1B==0,{x,xmin,xmax},{y,ymin,ymax},
ContourStyle->{Thick,barvaAB,
}],
ContourPlot[primkaAP==0,{x,xmin,xmax},{y,ymin,ymax},
ContourStyle->{Thick,barvaAP}],
Graphics[{
Text[Style["p",1.25velikostpisma,barvap,FontFamily->"Helvetica"],{bodpopisupx+delta,bodpopisupy+delta},{Center,Center}],
Text[Style["k",1.25velikostpisma,barvak,FontFamily->"Helvetica"],{bodpopisukx-delta,bodpopisuky+delta},{Center,Center}],

{barvaboduA,PointSize[velikostbodu],Point[bodA]},
{barvaboduB,PointSize[velikostbodu],Point[bodB]},
Text[Style["A",1.25velikostpisma,barvaboduA,FontFamily->"Helvetica"],{bodA[[1]]-delta,bodA[[2]]+delta},{Center,Center}],
Text[Style["B",1.25velikostpisma,barvaboduB,FontFamily->"Helvetica"],{bodB[[1]]+delta,bodB[[2]]-1.5delta},{Center,Center}],

{barvaboduS,PointSize[0.75velikostbodu],Point[{pomstredx,pomstredy}],
Text[Style["S",velikostpisma,barvaboduS,FontFamily->"Helvetica"],{pomstredx-1.5delta,pomstredy},{Center,Center}]},

{barvaboduA,PointSize[0.75velikostbodu],Point[bodA1]},
Text[Style["A´",1.25velikostpisma,barvaboduA,FontFamily->"Helvetica"],{bodA1[[1]]-delta,bodA1[[2]]+1.5delta},{Center,Center}],

{barvaboduP,PointSize[0.75velikostbodu],Point[{prusecikx,pruseciky}],
Text[Style["P",velikostpisma,barvaboduP,FontFamily->"Helvetica"],{prusecikx-delta,pruseciky-delta},{Center,Center}]},
}],

AspectRatio->Automatic,
Frame->False,
TicksStyle->Directive[barva,0.75velikostpisma],
Axes->True,
AxesLabel->{Style["x",velikostpisma,barva],Style["y",velikostpisma,barva]},
ImageSize->500]
Print["Rovnice přímky, na které leží dopadající paprsek, má tvar ",primkaAP," = 0."]
Print["Rovnice přímky, na které leží odražený paprsek, má tvar ",primkaA1B," = 0."]