(* 06_06 *)

(* Require XMLgen_MC.nb ver >=0.04 *)
SetDirectory[NotebookDirectory[]];
<<XMLgenMC.mx;
TTS[mt_]:=ToString[TeXForm[StandardForm[mt]]];
TOT[mt_]:=ToString[OneLineTeXForm[mt]];
TOTT[mt_]:=ToString[OneLineTeXForm[Transpose[mt]]];
TOC[mt_,c_]:=TOTT[{Transpose[mt][[c]]}];
TTD[r_]:=StringReplace[TT[r],"\\frac"->"\\dfrac"];
Rnz[m_]:=(RandomInteger[m]+1)*(2*RandomInteger[1]-1); (* \\pm 1,\pm2,...,\pm(m+1) *)
Rpos[m_]:=RandomInteger[m]+1; (* 1,2,...,m+1 *)
Rbtw[m_]:=RandomInteger[2m]-m;
TTC[A_,n_]:=TOTT[{(Transpose[A])[[n]]}];
Col[A_,n_]:=Transpose[{A[[Range[Length[A]],n]]}];
ColCat[CL_]:=Join@@@(Transpose@CL);
PtString[M_]:=StringReplace[ToString[M],{"{"->"(","}"->")"}];
Title="与法線ベクトルを持つパラメータ表示";
SELNUM=6;NUM=200;

(* Select matrices satisfying some mapping conditions *)
QtList={}; For[ct=1,ct≤300,ct++,
GML={};While[Length[GML]≤6,
GM={{Rnz[2],Rnz[2]},{Rnz[2],Rnz[2]}};While[Det[GM]==0,GM={{Rnz[2],Rnz[2]},{Rnz[2],Rnz[2]}}];
GML=Append[GML,GM];GML=DeleteDuplicates[GML]];
Wn={Rnz[3],Rnz[3],Rnz[3]};
{Wu,Wv}=NullSpace[{Wn}];
QtList=Append[QtList,{RandomChoice[{1,2,2,2,3,3,3,3,3,3,4}],{Wn,Wu,Wv,GML}}];
QtList=DeleteDuplicates[QtList]];QtList=RandomSample[QtList,NUM];Length[QtList]

QtextF[mm_]:=Module[{Cn,Wx,Wn,Wu,Wv,GML,Wp},
{Cn,{Wn,Wu,Wv,GML}}=QtList[[mm]];
Wp={RandomInteger[9]-4,RandomInteger[9]-5,RandomInteger[8]-4};
Wx={x,y,z};
Return["法線ベクトル\\("<>TOTT[{Wn}]<>"\\)を持つ平面のパラメータ表示を"
<>"すべて選びなさい."]];

CListF[mm_]:=Module[{Cn,Wn,Wp,Wu,Wv,Wu1,Wv1,GML,ct,Wx,fs,ret={}},
{Cn,{Wn,Wu,Wv,GML}}=QtList[[mm]];
fs="正解です.";Wx=TOTT[{{x,y,z}}];
For[ct=1,ct≤Length[GML],ct++,
{Wu1,Wv1}=GML[[ct]].{Wu,Wv};
Wp={Rnz[3],Rnz[3],Rnz[3]};
ret=Append[ret,{"\\("<>Wx<>"="<>TOTT[{Wp}]
<>"+s"<>TOTT[{Wu1}]<>"+t"<>TOTT[{Wv1}]<>"\\)",fs}]];
Return[RandomSample[ret,Cn]]];

QtextF[3]

CListF[3]

ICListF[mm_]:=Module[{Cn,Wn,Wu,Wv,WGL,Wp0,Wp,Wu1,Wv1,Wuv,GML,Ct,k,l,Wx,fs,fs1,fs2,fs3,ret={}},
{Cn,{Wn,Wu,Wv,GML}}=QtList[[mm]];Wx="\\("<>TOTT[{{x,y,z}}]<>"=";
fs1="与ベクトルは\\(x=p+su+tv\\)の\\(u,v\\)の一方とは直交しますが,もう一方とは直交しないようです.";
fs2="与ベクトルは\\(x=p+su+tv\\)の\\(u,v\\)のどちらとも直交しません.確認してみよう.";
fs3="与ベクトルと\\(x=p+su+tv\\)における\\(p,u,v\\)のどれと直交すればよいか考えよう.";
For[ct=1,ct≤Length[GML],ct++,
Wp0=Rnz[2]*Wn+Rnz[1]*Wu+Rnz[1]*Wv;k=RandomInteger[2];l=RandomInteger[1]+1;
{Wu1,Wv1}=GML[[ct]].{Wu,Wv};Wuv=RandomChoice[{Wu1,Wv1}];
Which[
k==0,Wp={Wp0,Wuv}[[l]];Wu1=Rnz[1]*Wu1+Rnz[1]*Wn;fs=fs1<>{"",fs3}[[l]],
k==1,Wp={Wp0,Wuv}[[l]];Wv1=Rnz[1]*Wv1+Rnz[1]*Wn;fs=fs1<>{"",fs3}[[l]],
k==2,Wp={Wp0,Wuv}[[l]];Wu1=Wu1+Rnz[1]*Wn;Wv1=Wv1+Rnz[1]*Wn;fs=fs2<>{"",fs3}[[l]]];
ret=Append[ret,{Wx<>TOTT[{Wp}]<>"+s"<>TOTT[{Wu1}]<>"+t"<>TOTT[{Wv1}]<>"\\)",fs}]];
Return[RandomSample[ret,SELNUM-Cn]]];

Numbering="abc";

GenerateMCxml[DFname[],"LA/06-05."<>Title<>"(MC1)",Title,NUM,"false",QtextF,CListF,ICListF]

QtextF[3]

QtextF[3]

Timing[ICListF[3]]

{4,-3,1}.{-1,-1,1}

RandomInteger[4]