%\NeedsTeXFormat{LaTeX2e}
%\typeout{Option Style‘qbgraph’2005 July 29 by T. Moonlight}
%\typeout{......................main style +qbgraph++++++++++}
\typeout{                       sub style         +qbgraphg+  area}
%
\newcommand{\qbareaunitsq}[4]{ % #1<x<#1+1,#2<y<#2+1 の領域を傾き#3の斜線で#4の間隔で塗る
\Add{#1}{1}{\tmpaRx}
\Add{#2}{1}{\tmpaTy}
%\typeout{#1:\tmpaRx:#2:\tmpaTy:#3:#4}
\qbarea{#1}{\tmpaRx}{#2}{\tmpaTy}{#3}{#4}
}
\newcommand{\qbarea}[6]{ % #1<x<#2,#3<y<#4 の領域を傾き#5の斜線で#6の間隔で塗る
\ifdim #1 pt =#2 pt \typeout{*** \qbgraph style Hold Nothing!! ***} \else
\ifdim #3 pt =#4 pt \typeout{**** \qbgraph style Hold Nothing!! ****} \else
\qbabsd{#3}{#4}{\tmpHD} \Div{\tmpHD}{2}{\tmpHD} \Div{\tmpHD}{#5}{\tmpHD} \qbabs{\tmpHD}{\tmpHD}
\Add{#3}{#4}{\tmpLy} \Div{\tmpLy}{2}{\tmpLy} \Div{\tmpLy}{#5}{\tmpLy}
\Sub{#1}{\tmpHD}{\tmpLx} \Sub{\tmpLx}{\tmpLy}{\tmpLx} \Div{\tmpLx}{#6}{\tmpLx}
\qbint{\tmpLx}{\tmpLx} \Sub{\tmpLx}{1}{\tmpLx} \Mul{\tmpLx}{#6}{\tmpLx}
\Add{#2}{\tmpHD}{\tmpRx} \Sub{\tmpRx}{\tmpLy}{\tmpRx} \Div{\tmpRx}{#6}{\tmpRx}
\qbint{\tmpRx}{\tmpRx} \Add{\tmpRx}{1}{\tmpRx} \Mul{\tmpRx}{#6}{\tmpRx}
\qbdef{0}{\tmpLy}
\Add{\tmpLy}{#5}{\tmpLyy}
{
\loop
%   \typeout{\tmpLx < \tmpRx}
   \ifdim \tmpLx pt < \tmpRx pt
      \Add{\tmpLx}{1}{\tmpLxx}
%    \qblinee{\tmpLx}{\tmpLy}{\tmpLxx}{\tmpLyy}{10}
      \qbcrosspoint{#1}{#3}{#1}{#4}{\tmpLx}{\tmpLy}{\tmpLxx}{\tmpLyy}
      \ifdim \tmpina pt = 1 pt 
%       \qbtmppointo
         \qbdefp{\tmpx}{\tmpy}{\tmpSx}{\tmpSy}
         \qbcrosspoint{#1}{#3}{#2}{#3}{\tmpLx}{\tmpLy}{\tmpLxx}{\tmpLyy}
         \qbdef{1}{\tmpeq}
         \ifdim \tmpx pt=\tmpSx pt
            \ifdim \tmpy pt=\tmpSy pt \qbdef{0}{\tmpeq} \fi
         \fi
         \Mul{\tmpeq}{\tmpina}{\tmpeq}
         \ifdim \tmpeq pt = 1 pt
%          \qbtmppointx
            \qbtmpdefp{\tmpTx}{\tmpTy}
            \qblined{\tmpTx}{\tmpTy}{\tmpSx}{\tmpSy}
         \else
            \qbcrosspoint{#1}{#4}{#2}{#4}{\tmpLx}{\tmpLy}{\tmpLxx}{\tmpLyy}
            \qbdef{1}{\tmpeq}
            \ifdim \tmpx pt=\tmpSx pt
               \ifdim \tmpy pt=\tmpSy pt \qbdef{0}{\tmpeq} \fi
            \fi
            \Mul{\tmpeq}{\tmpina}{\tmpeq}
            \ifdim \tmpeq pt = 1 pt
%            \ifdim \tmpina pt = 1 pt
               \qbtmpdefp{\tmpTx}{\tmpTy}
               \qblined{\tmpTx}{\tmpTy}{\tmpSx}{\tmpSy}
            \else
               \qbcrosspoint{#2}{#3}{#2}{#4}{\tmpLx}{\tmpLy}{\tmpLxx}{\tmpLyy}
               \qbdef{1}{\tmpeq}
               \ifdim \tmpx pt=\tmpSx pt
                  \ifdim \tmpy pt=\tmpSy pt \qbdef{0}{\tmpeq} \fi
               \fi
               \Mul{\tmpeq}{\tmpina}{\tmpeq}
               \ifdim \tmpeq pt = 1 pt
                  \qbtmpdefp{\tmpTx}{\tmpTy}
                  \qblined{\tmpTx}{\tmpTy}{\tmpSx}{\tmpSy}
               \fi
            \fi
         \fi 
      \else
         \qbcrosspoint{#1}{#3}{#2}{#3}{\tmpLx}{\tmpLy}{\tmpLxx}{\tmpLyy}
         \ifdim \tmpina pt = 1 pt
            \qbtmpdefp{\tmpSx}{\tmpSy}
%          \qbtmppoint
            \qbcrosspoint{#1}{#4}{#2}{#4}{\tmpLx}{\tmpLy}{\tmpLxx}{\tmpLyy}
            \ifdim \tmpina pt = 1 pt
               \qbtmpdefp{\tmpTx}{\tmpTy}
               \qblined{\tmpTx}{\tmpTy}{\tmpSx}{\tmpSy}
            \else
               \qbcrosspoint{#2}{#3}{#2}{#4}{\tmpLx}{\tmpLy}{\tmpLxx}{\tmpLyy}
               \ifdim \tmpina pt = 1 pt
                  \qbtmpdefp{\tmpTx}{\tmpTy}
                  \qblined{\tmpTx}{\tmpTy}{\tmpSx}{\tmpSy}
               \fi
            \fi
         \else
            \qbcrosspoint{#1}{#4}{#2}{#4}{\tmpLx}{\tmpLy}{\tmpLxx}{\tmpLyy}
            \ifdim \tmpina pt = 1 pt
%            \qbtmppoint
               \qbtmpdefp{\tmpSx}{\tmpSy}
               \qbcrosspoint{#2}{#3}{#2}{#4}{\tmpLx}{\tmpLy}{\tmpLxx}{\tmpLyy}
               \ifdim \tmpina pt = 1 pt
                  \qbtmpdefp{\tmpTx}{\tmpTy}
                  \qblined{\tmpTx}{\tmpTy}{\tmpSx}{\tmpSy}
               \fi
            \fi
         \fi
      \fi
%   \fi   
   \Add{\tmpLx}{#6}{\tmpLx}
%   \typeout{\tmpLx}
\repeat
\fi\fi
}}
\newcommand{\qbcirclearea}[5]{% 中心(#1,#2)半径#3の円の内部を#4度の法線の斜線で#5刻みで塗る。
   \Add{#4}{180}{\tmpT} \qbdef{0}{\tmpr}
   \loop
   \ifdim \tmpr pt<#3 pt
   \qbcirclechode{#1}{#2}{#3}{\tmpr}{#4}
   \qbcirclechode{#1}{#2}{#3}{\tmpr}{\tmpT}
   \Add{\tmpr}{#5}{\tmpr}
   \repeat
}
\newcommand{\qbcircleareadot}[5]{% 中心(#1,#2)半径#3の円の内部を#4度の法線の斜線で#5刻みで塗る。
   \Add{#4}{180}{\tmpT} \qbdef{0}{\tmpr}
   \loop
   \ifdim \tmpr pt<#3 pt
   \qbcirclechodedot{#1}{#2}{#3}{\tmpr}{#4}
   \qbcirclechodedot{#1}{#2}{#3}{\tmpr}{\tmpT}
   \Add{\tmpr}{#5}{\tmpr}
   \repeat
}
\newcommand{\qbcircleareac}[5]{% 中心(#1,#2)半径#3の円の内部を#4度の法線の斜線で#5刻みで塗る。
   \qbcirc{#1}{#2}{#3}
   \qbcirclearea{#1}{#2}{#3}{#4}{#5}
}
\newcommand{\qbtriarea}[8]{% (#1,#2),(#3,#4),(#5,#6)の三点を頂点とする三角形の内部を傾き#7の斜線で#8間隔で塗る。
%\qbdefp{#7}{#8}{\tmpSD}{\tmpDD}
\qbgetverticallinep{#1}{#2}{0}{0}{1}{#7}{\tmpvx}{\tmpvy}
% \qbtmppoint
\qbdist{\tmpvx}{\tmpvy}{#1}{#2}{\tmpAd}
\qbgetverticallinep{#3}{#4}{0}{0}{1}{#7}{\tmpvx}{\tmpvy}
% \qbtmppoint
\qbdist{\tmpvx}{\tmpvy}{#3}{#4}{\tmpBd}
\qbgetverticallinep{#5}{#6}{0}{0}{1}{#7}{\tmpvx}{\tmpvy}
% \qbtmppoint
\qbdist{\tmpvx}{\tmpvy}{#5}{#6}{\tmpCd}
\qbdef{\tmpAd}{\tmpD}
\ifdim \tmpBd pt > \tmpD pt \qbdef{\tmpBd}{\tmpD} \fi
\ifdim \tmpCd pt > \tmpD pt \qbdef{\tmpCd}{\tmpD} \fi
\qbmam{1}{1}{#7}{#7}{\tmpDC} \Sqroot{\tmpDC}{\tmpDC}
\Div{\tmpDC}{#7}{\tmpDC}
\ifdim \tmpDC pt <0 pt \Mul{\tmpDC}{-1}{\tmpDC} \fi
\Mul{\tmpD}{\tmpDC}{\tmpD} \Div{\tmpD}{#8}{\tmpDC}
% \put(0,0){\tmpDC \tmpD}
% \qbpointo{\tmpD}{0}
\qbint{\tmpDC}{\tmpDC} \Add{\tmpDC}{1}{\tmpDC}
\Mul{\tmpDC}{#8}{\tmpRx} \Mul{\tmpRx}{-1}{\tmpLx}
% \qbpointo{\tmpLx}{0}
{
\loop
%   \typeout{\tmpLx < \tmpRx}
   \ifdim \tmpLx pt < \tmpRx pt
   \Add{\tmpLx}{1}{\tmpLxx}
   \qbdef{0}{\tmpLy}
   \Add{\tmpLy}{#7}{\tmpLyy}
%    \qblinee{\tmpLx}{\tmpLy}{\tmpLxx}{\tmpLyy}{10}
   \qbcrosspoint{#1}{#2}{#3}{#4}{\tmpLx}{\tmpLy}{\tmpLxx}{\tmpLyy}
%   \typeout{\tmpLx}
   \ifdim \tmpina pt = 1 pt 
%       \qbtmppoint
      \qbdefp{\tmpx}{\tmpy}{\tmpSx}{\tmpSy}
      \qbcrosspoint{#5}{#6}{#3}{#4}{\tmpLx}{\tmpLy}{\tmpLxx}{\tmpLyy}
%      \typeout{*** qbtriarea :-: 1}
      \ifdim \tmpina pt = 1 pt
%      \typeout{*** qbtriarea :-: 1a}
%          \qbtmppointx
         \qbtmpdefp{\tmpTx}{\tmpTy}
%      \typeout{*** qbtriarea :-: 1aa :-:\tmpTx,:,\tmpSx,:,\tmpTy:,:\tmpSy}
         \qblined{\tmpTx}{\tmpTy}{\tmpSx}{\tmpSy}
%      \typeout{*** qbtriarea :-: 1aaa}
      \else
%      \typeout{*** qbtriarea :-: 1b}
         \qbcrosspoint{#5}{#6}{#1}{#2}{\tmpLx}{\tmpLy}{\tmpLxx}{\tmpLyy}
%      \typeout{*** qbtriarea :-: 2}
         \ifdim \tmpina pt = 1 pt
            \qbtmpdefp{\tmpTx}{\tmpTy}
            \qblined{\tmpTx}{\tmpTy}{\tmpSx}{\tmpSy}
         \fi
      \fi 
   \else
      \qbcrosspoint{#5}{#6}{#3}{#4}{\tmpLx}{\tmpLy}{\tmpLxx}{\tmpLyy}
%      \typeout{*** qbtriarea :-: 3}
      \ifdim \tmpina pt = 1 pt
         \qbdefp{\tmpx}{\tmpy}{\tmpSx}{\tmpSy}
         \qbcrosspoint{#5}{#6}{#1}{#2}{\tmpLx}{\tmpLy}{\tmpLxx}{\tmpLyy}
%      \typeout{*** qbtriarea :-: 4}
         \ifdim \tmpina pt = 1 pt
            \qbtmpdefp{\tmpTx}{\tmpTy}
            \qblined{\tmpTx}{\tmpTy}{\tmpSx}{\tmpSy}
         \fi
      \fi
   \fi   
   \Add{\tmpLx}{#8}{\tmpLx}
%   \typeout{\tmpLx}
\repeat
}
}
%
\newcommand{\qbpictareafstfun}[2]{ %y=#1x+#2のグラフを描くときの，
% picture環境の(\tmpPicW,\tmpPicH)(\tmpPicL,\tmpPicB)と\unitlengthの値\tmpUnitL(truemm)を設定する。
\ifdim #1 pt= 0 pt
   \qbabs{#2}{\tmpPw} \Mul{\tmpPw}{1.5}{\tmpPw}
\else
   \Div{#2}{#1}{\tmpPw} \qbabs{\tmpPw}{\tmpPw}
   \ifdim \tmpPw pt= 0 pt
      \qbdef{3}{\tmpPw}
   \fi
   \qbabs{#2}{\tmpPwo}
   \ifdim \tmpPw pt> \tmpPwo pt
      \qbdef{\tmpPw}{\tmpPwo}
   \fi
   \Mul{\tmpPwo}{1.5}{\tmpPw}
\fi
\Mul{\tmpPw}{2}{\tmpPwd} \Mul{\tmpPw}{-1}{\tmpPicL}
\Add{\tmpPwd}{2}{\tmpPicW} \Add{\tmpPwd}{2}{\tmpPicH}
      \Div{\tmpPicW}{20}{\tmpArrowL}
\Add{\tmpPicW}{\tmpArrowL}{\tmpPicWs} \Add{\tmpPicW}{\tmpArrowL}{\tmpPicHs}
\Sub{\tmpPicL}{1}{\tmpPicL} \qbdef{\tmpPicL}{\tmpPicB}
\Add{\tmpPicL}{\tmpPicW}{\tmpPicR} \Add{\tmpPicB}{\tmpPicH}{\tmpPicT}
\Div{50}{\tmpPicWs}{\tmpUnitL}
%   \Div{\tmpAw}{10}{\tmpSdx}
%   \unitlength=\tmpunitl truemm
%   \Div{\tmpAw}{8}{\tmptxtu} \Div{\tmpAw}{-6}{\tmptxtum}
}
%
\newcommand{\qbpictfstfunareaPt}[6]{ % \qbpictarea内でy=#1x+#2の左点(#3,#4)右点(#5,#6)を得る
   % pictureの範囲の両端での関数の値を見る
   \qbdefp{\tmpPicL}{\tmpPicR}{#3}{#5}
   \qbfuncfst{#1}{#2}{#3}{#4}
   \qbfuncfst{#1}{#2}{#5}{#6}
   % yの値が上下に外れている場合の処理
   \ifdim #4 pt> \tmpPicT pt
      \qbcrosspoint{#3}{#4}{#5}{#6}{\tmpPicL}{\tmpPicT}{\tmpPicR}{\tmpPicT}
      \qbtmpdefp{#3}{#4} \qbdef{\tmpPicT}{#4}
   \fi
   \ifdim #4 pt< \tmpPicB pt
      \qbcrosspoint{#3}{#4}{#5}{#6}{\tmpPicL}{\tmpPicB}{\tmpPicR}{\tmpPicB}
      \qbtmpdefp{#3}{#4} \qbdef{\tmpPicB}{#4}
   \fi
   \ifdim #6 pt> \tmpPicT pt
      \qbcrosspoint{#3}{#4}{#5}{#6}{\tmpPicL}{\tmpPicT}{\tmpPicR}{\tmpPicT}
      \qbtmpdefp{#5}{#6} \qbdef{\tmpPicT}{#6}
   \fi
   \ifdim #6 pt< \tmpPicB pt
      \qbcrosspoint{#3}{#4}{#5}{#6}{\tmpPicL}{\tmpPicB}{\tmpPicR}{\tmpPicB}
      \qbtmpdefp{#5}{#6} \qbdef{\tmpPicB}{#6}
   \fi
}
%
\newcommand{\qbpictfstfun}[2]{ % \qbpictarea内でy=#1x+#2のグラフを描く
   \qbpictfstfunareaPt{#1}{#2}{\tmpFlx}{\tmpFly}{\tmpFrx}{\tmpFry}
   \qbline{\tmpFlx}{\tmpFly}{\tmpFrx}{\tmpFry}
}
%
\newcommand{\qbpictfstfunareaUp}[4]{ % \qbpictarea内でy>#1x+#2の領域を塗る
   \qbpictfstfunareaPt{#1}{#2}{\tmpFlx}{\tmpFly}{\tmpFrx}{\tmpFry}
   \qbline{\tmpFlx}{\tmpFly}{\tmpFrx}{\tmpFry}
   \qbgetmidpoint{\tmpFlx}{\tmpFly}{\tmpFrx}{\tmpFry}{\tmpFmx}{\tmpFmy}
   % まず、pictureの範囲内で直線の上側を塗る。
   \qbpoint{\tmpFlx}{\tmpFly}   \qbpoint{\tmpFrx}{\tmpFry}   \qbpoint{\tmpFmx}{\tmpFmy}

   \qbpictareaS{\tmpFmx}{\tmpFmy}{\tmpFrx}{\tmpFry}{\tmpFlx}{\tmpFly}{#3}{#4}
}
\newcommand{\qbpictfstfunareaDn}[4]{ % \qbpictarea内でy>#1x+#2の領域を塗る
   \qbpictfstfunareaPt{#1}{#2}{\tmpFlx}{\tmpFly}{\tmpFrx}{\tmpFry}
   \qbline{\tmpFlx}{\tmpFly}{\tmpFrx}{\tmpFry}
   \qbgetmidpoint{\tmpFlx}{\tmpFly}{\tmpFrx}{\tmpFry}{\tmpFmx}{\tmpFmy}
   % まず、pictureの範囲内で直線の上側を塗る。
   \qbpoint{\tmpFlx}{\tmpFly}   \qbpoint{\tmpFrx}{\tmpFry}   \qbpoint{\tmpFmx}{\tmpFmy}

   \qbpictareaS{\tmpFmx}{\tmpFmy}{\tmpFlx}{\tmpFly}{\tmpFrx}{\tmpFry}{#3}{#4}
}
% picture領域内の点と，縁の2点を指定すると，そこを塗る
\newcommand{\qbpictareaS}[8]{ % picture内の点(#1,#2)と縁上の点(#3,#4),(#5,#6)を結ぶ線分を境界に、はさまれた部分を塗りつぶす。
%   \qbline{#1}{#2}{#3}{#4}
%   \qbline{#1}{#2}{#5}{#6}
   \qbdef{0}{\tmpgoal}
   \qbdefp{#3}{#4}{\tmpCNx}{\tmpCNy}
%\typeout{qbpictareaS,,,\tmpCNx,:,\tmpCNy,:,\tmpPicT,:,\tmpPicR}
   \loop
   \ifdim \tmpgoal pt=0.0 pt
      \qbpictareaSnxtcnrsrch{\tmpCNx}{\tmpCNy}{#5}{#6}{\tmpNCNx}{\tmpNCNy}{\tmpgoal}
      \qbtriarea{#1}{#2}{\tmpCNx}{\tmpCNy}{\tmpNCNx}{\tmpNCNy}{#7}{#8}
      \qbdefp{\tmpNCNx}{\tmpNCNy}{\tmpCNx}{\tmpCNy}
%      \typeout{\tmpNCNx,:,\tmpNCNy,:,\tmpgoal}
   \repeat
%\typeout{*****out***}
}
\newcommand{\qbpictareaSnxtcnrsrch}[7]{ %(#1,#2)から反時計回りに縁上を探り，
% (#3,#4)に該当すれば #7に1を返し
% 該当しなければ，次のコーナーを(#5,#6)に返す。
\ifdim #1 pt= \tmpPicL pt
   \ifdim #2 pt>\tmpPicB pt
      \ifdim #3 pt=\tmpPicL pt
         \ifdim #2 pt>#4 pt
            \qbdef{1}{#7}
            \qbdefp{#3}{#4}{#5}{#6}
         \else
            \qbdefp{\tmpPicL}{\tmpPicB}{#5}{#6}
         \fi  
      \else
         \qbdefp{\tmpPicL}{\tmpPicB}{#5}{#6}
      \fi
   \fi
\fi
\ifdim #2 pt=\tmpPicB pt
   \ifdim #1 pt< \tmpPicR pt
      \ifdim #4 pt=\tmpPicB pt
         \ifdim #1 pt< #3 pt
            \qbdef{1}{#7}
            \qbdefp{#3}{#4}{#5}{#6}
         \else
            \qbdefp{\tmpPicR}{\tmpPicB}{#5}{#6}
         \fi
      \else
         \qbdefp{\tmpPicR}{\tmpPicB}{#5}{#6}
      \fi
   \fi
\fi
\ifdim #1 pt=\tmpPicR pt
   \ifdim #2 pt<\tmpPicT pt
      \ifdim #3 pt=\tmpPicR pt
         \ifdim #2 pt<#4 pt
            \qbdef{1}{#7}
            \qbdefp{#3}{#4}{#5}{#6}
         \else
            \qbdefp{\tmpPicR}{\tmpPicT}{#5}{#6}
         \fi
      \else
         \qbdefp{\tmpPicR}{\tmpPicT}{#5}{#6}
      \fi
   \fi
\fi
\ifdim #2 pt=\tmpPicT pt
   \ifdim #1 pt>\tmpPicL pt
      \ifdim #4 pt=\tmpPicT pt
         \ifdim #3 pt<#1 pt
            \qbdef{1}{#7}
            \qbdefp{#3}{#4}{#5}{#6}
         \else
            \qbdefp{\tmpPicL}{\tmpPicT}{#5}{#6}
         \fi
      \else
         \qbdefp{\tmpPicL}{\tmpPicT}{#5}{#6}
      \fi
   \fi
\fi
}
%
\endinput
% ここまでがマクロ。以下例文。