diff options
author | Karl Berry <karl@freefriends.org> | 2018-12-25 21:49:04 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2018-12-25 21:49:04 +0000 |
commit | 149bc3fbc5c7aac22d6f6439c5af590420f2b82d (patch) | |
tree | a7835e48b0e16a3a57e6078a85b81665ee404401 /Master/texmf-dist | |
parent | 9ddb2c44860e61a962778bcb5294315c3722db6b (diff) |
ketcindy (25dec18)
git-svn-id: svn://tug.org/texlive/trunk@49502 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
47 files changed, 3390 insertions, 1285 deletions
diff --git a/Master/texmf-dist/doc/support/ketcindy/HowToInstallE.pdf b/Master/texmf-dist/doc/support/ketcindy/HowToInstallE.pdf Binary files differnew file mode 100644 index 00000000000..312420da278 --- /dev/null +++ b/Master/texmf-dist/doc/support/ketcindy/HowToInstallE.pdf diff --git a/Master/texmf-dist/doc/support/ketcindy/HowToInstallJ.pdf b/Master/texmf-dist/doc/support/ketcindy/HowToInstallJ.pdf Binary files differnew file mode 100644 index 00000000000..3762776f930 --- /dev/null +++ b/Master/texmf-dist/doc/support/ketcindy/HowToInstallJ.pdf diff --git a/Master/texmf-dist/doc/support/ketcindy/README b/Master/texmf-dist/doc/support/ketcindy/README index 6f1287e29b6..cb05dba8668 100644 --- a/Master/texmf-dist/doc/support/ketcindy/README +++ b/Master/texmf-dist/doc/support/ketcindy/README @@ -1,7 +1,7 @@ KeTCindy ======== -Version: $Version$ +Version: 20181225.0 KeTCindy combines a plugin to Cinderella with free mathematical software (R, Maxima, ...) to produce high-quality LaTeX graphics. diff --git a/Master/texmf-dist/doc/support/ketcindy/ketmanual/KeTCindyReferenceE.pdf b/Master/texmf-dist/doc/support/ketcindy/ketmanual/KeTCindyReferenceE.pdf Binary files differindex 1b07c8cb409..29e0817f06c 100644 --- a/Master/texmf-dist/doc/support/ketcindy/ketmanual/KeTCindyReferenceE.pdf +++ b/Master/texmf-dist/doc/support/ketcindy/ketmanual/KeTCindyReferenceE.pdf diff --git a/Master/texmf-dist/doc/support/ketcindy/ketmanual/KeTCindyReferenceJ.pdf b/Master/texmf-dist/doc/support/ketcindy/ketmanual/KeTCindyReferenceJ.pdf Binary files differindex 3d883f3727b..1f1b277950e 100644 --- a/Master/texmf-dist/doc/support/ketcindy/ketmanual/KeTCindyReferenceJ.pdf +++ b/Master/texmf-dist/doc/support/ketcindy/ketmanual/KeTCindyReferenceJ.pdf diff --git a/Master/texmf-dist/doc/support/ketcindy/samples/s07slides/howtouseslideJ.txt b/Master/texmf-dist/doc/support/ketcindy/samples/s07slides/howtouseslideJ.txt index 69ce201a905..78be82e34bd 100644 --- a/Master/texmf-dist/doc/support/ketcindy/samples/s07slides/howtouseslideJ.txt +++ b/Master/texmf-dist/doc/support/ketcindy/samples/s07slides/howtouseslideJ.txt @@ -1,4 +1,4 @@ -ketslideによるプレゼンテーション 2018.07.29 +ketslideによるプレゼンテーション 2018.12.25 0.作成の流れ @@ -17,7 +17,7 @@ ketslideによるプレゼンテーション 2018.07.29 1.txtファイルの編集 - 1)すべての行の最後は必ず // をつける. + 1)すべての行の最後につける. 注)urlの指定で//を用いるとき,||||とすると//に変換される. 2)各ブロックの引数の区切りは :: 3)コマンド @@ -31,7 +31,7 @@ ketslideによるプレゼンテーション 2018.07.29 1行目の//を外す. 次の行から,::区切りで書き加え,最後に//をおく. 注)タイトル画面が不要の場合は, - タイトル(またはtitle)::// + タイトル(またはtitle)::(//をつけてもよい) ・main::段落タイトル名// 注)ページ番号を表示するときは,直後に\slidepage[1]//を入れる. ・new(::行下げ)::タイトル((::位置)::読み込みファイル)// diff --git a/Master/texmf-dist/doc/support/ketcindy/samples/s07slides/s0701basic.cdy b/Master/texmf-dist/doc/support/ketcindy/samples/s07slides/s0701basic.cdy Binary files differindex 06fbc2f020f..7f27a3949f3 100644 --- a/Master/texmf-dist/doc/support/ketcindy/samples/s07slides/s0701basic.cdy +++ b/Master/texmf-dist/doc/support/ketcindy/samples/s07slides/s0701basic.cdy diff --git a/Master/texmf-dist/doc/support/ketcindy/samples/s09surfaceC/s0901paraboloid.cdy b/Master/texmf-dist/doc/support/ketcindy/samples/s09surfaceC/s0901paraboloid.cdy Binary files differindex e74841c77c7..0269e38f2ca 100644 --- a/Master/texmf-dist/doc/support/ketcindy/samples/s09surfaceC/s0901paraboloid.cdy +++ b/Master/texmf-dist/doc/support/ketcindy/samples/s09surfaceC/s0901paraboloid.cdy diff --git a/Master/texmf-dist/doc/support/ketcindy/samples/s13meshlab/s1301basic.cdy b/Master/texmf-dist/doc/support/ketcindy/samples/s13meshlab/s1301basic.cdy Binary files differdeleted file mode 100644 index 2a559f793b9..00000000000 --- a/Master/texmf-dist/doc/support/ketcindy/samples/s13meshlab/s1301basic.cdy +++ /dev/null diff --git a/Master/texmf-dist/doc/support/ketcindy/samples/s13objview/s1301basic.cdy b/Master/texmf-dist/doc/support/ketcindy/samples/s13objview/s1301basic.cdy Binary files differnew file mode 100644 index 00000000000..49d7c78e684 --- /dev/null +++ b/Master/texmf-dist/doc/support/ketcindy/samples/s13objview/s1301basic.cdy diff --git a/Master/texmf-dist/doc/support/ketcindy/samples/s13meshlab/s1303objparts.cdy b/Master/texmf-dist/doc/support/ketcindy/samples/s13objview/s1303objparts.cdy Binary files differindex 068af73520d..068af73520d 100644 --- a/Master/texmf-dist/doc/support/ketcindy/samples/s13meshlab/s1303objparts.cdy +++ b/Master/texmf-dist/doc/support/ketcindy/samples/s13objview/s1303objparts.cdy diff --git a/Master/texmf-dist/doc/support/ketcindy/samples/s13meshlab/s1304symbol.cdy b/Master/texmf-dist/doc/support/ketcindy/samples/s13objview/s1304symbol.cdy Binary files differindex 47bf089fee8..47bf089fee8 100644 --- a/Master/texmf-dist/doc/support/ketcindy/samples/s13meshlab/s1304symbol.cdy +++ b/Master/texmf-dist/doc/support/ketcindy/samples/s13objview/s1304symbol.cdy diff --git a/Master/texmf-dist/doc/support/ketcindy/samples/s13meshlab/s1305hyperpara.cdy b/Master/texmf-dist/doc/support/ketcindy/samples/s13objview/s1305hyperpara.cdy Binary files differindex 07a912d6098..07a912d6098 100644 --- a/Master/texmf-dist/doc/support/ketcindy/samples/s13meshlab/s1305hyperpara.cdy +++ b/Master/texmf-dist/doc/support/ketcindy/samples/s13objview/s1305hyperpara.cdy diff --git a/Master/texmf-dist/doc/support/ketcindy/samples/s13meshlab/s1306poly.cdy b/Master/texmf-dist/doc/support/ketcindy/samples/s13objview/s1306poly.cdy Binary files differindex daa44cf7223..daa44cf7223 100644 --- a/Master/texmf-dist/doc/support/ketcindy/samples/s13meshlab/s1306poly.cdy +++ b/Master/texmf-dist/doc/support/ketcindy/samples/s13objview/s1306poly.cdy diff --git a/Master/texmf-dist/doc/support/ketcindy/samples/s13meshlab/s1307poly2.cdy b/Master/texmf-dist/doc/support/ketcindy/samples/s13objview/s1307poly2.cdy Binary files differindex 35d8ec377c2..35d8ec377c2 100644 --- a/Master/texmf-dist/doc/support/ketcindy/samples/s13meshlab/s1307poly2.cdy +++ b/Master/texmf-dist/doc/support/ketcindy/samples/s13objview/s1307poly2.cdy diff --git a/Master/texmf-dist/doc/support/ketcindy/samples/s13meshlab/s1308discont.cdy b/Master/texmf-dist/doc/support/ketcindy/samples/s13objview/s1308discont.cdy Binary files differindex 1d1e697af04..1d1e697af04 100644 --- a/Master/texmf-dist/doc/support/ketcindy/samples/s13meshlab/s1308discont.cdy +++ b/Master/texmf-dist/doc/support/ketcindy/samples/s13objview/s1308discont.cdy diff --git a/Master/texmf-dist/doc/support/ketcindy/samples/s13meshlab/s1309discont2.cdy b/Master/texmf-dist/doc/support/ketcindy/samples/s13objview/s1309discont2.cdy Binary files differindex fabcbe8d3c5..fabcbe8d3c5 100644 --- a/Master/texmf-dist/doc/support/ketcindy/samples/s13meshlab/s1309discont2.cdy +++ b/Master/texmf-dist/doc/support/ketcindy/samples/s13objview/s1309discont2.cdy diff --git a/Master/texmf-dist/doc/support/ketcindy/samples/s13meshlab/s1310totaldiff.cdy b/Master/texmf-dist/doc/support/ketcindy/samples/s13objview/s1310totaldiff.cdy Binary files differindex 522352db39b..522352db39b 100644 --- a/Master/texmf-dist/doc/support/ketcindy/samples/s13meshlab/s1310totaldiff.cdy +++ b/Master/texmf-dist/doc/support/ketcindy/samples/s13objview/s1310totaldiff.cdy diff --git a/Master/texmf-dist/doc/support/ketcindy/samples/s13meshlab/s1311plate.cdy b/Master/texmf-dist/doc/support/ketcindy/samples/s13objview/s1311plate.cdy Binary files differindex dabf7d469fd..dabf7d469fd 100644 --- a/Master/texmf-dist/doc/support/ketcindy/samples/s13meshlab/s1311plate.cdy +++ b/Master/texmf-dist/doc/support/ketcindy/samples/s13objview/s1311plate.cdy diff --git a/Master/texmf-dist/doc/support/ketcindy/samples/s13meshlab/s1312plane.cdy b/Master/texmf-dist/doc/support/ketcindy/samples/s13objview/s1312plane.cdy Binary files differindex 612333249ca..612333249ca 100644 --- a/Master/texmf-dist/doc/support/ketcindy/samples/s13meshlab/s1312plane.cdy +++ b/Master/texmf-dist/doc/support/ketcindy/samples/s13objview/s1312plane.cdy diff --git a/Master/texmf-dist/doc/support/ketcindy/samples/s13meshlab/s1313changescale.cdy b/Master/texmf-dist/doc/support/ketcindy/samples/s13objview/s1313changescale.cdy Binary files differindex ca9b331175c..ca9b331175c 100644 --- a/Master/texmf-dist/doc/support/ketcindy/samples/s13meshlab/s1313changescale.cdy +++ b/Master/texmf-dist/doc/support/ketcindy/samples/s13objview/s1313changescale.cdy diff --git a/Master/texmf-dist/doc/support/ketcindy/samples/s17spacekc/Spacekc.cdy b/Master/texmf-dist/doc/support/ketcindy/samples/s17spacekc/Spacekc.cdy Binary files differnew file mode 100644 index 00000000000..51e78c8040b --- /dev/null +++ b/Master/texmf-dist/doc/support/ketcindy/samples/s17spacekc/Spacekc.cdy diff --git a/Master/texmf-dist/doc/support/ketcindy/source/KetCindyPlugin/src/KetCindyPlugin.java b/Master/texmf-dist/doc/support/ketcindy/source/KetCindyPlugin/src/KetCindyPlugin.java index 053e3b08d8b..a202817b685 100644 --- a/Master/texmf-dist/doc/support/ketcindy/source/KetCindyPlugin/src/KetCindyPlugin.java +++ b/Master/texmf-dist/doc/support/ketcindy/source/KetCindyPlugin/src/KetCindyPlugin.java @@ -196,7 +196,8 @@ public class KetCindyPlugin extends CindyScriptPlugin { flg=14; } // 16.07.21 - if(str.indexOf(".SH")>-1 || str.indexOf(".BAT")>-1){ + if(str.indexOf(".SH")>-1|| str.indexOf(".SH")>-1 || str.indexOf(".BAT")>-1){ + //181125 if(str.indexOf("MAXIMA.")==-1 && str.indexOf("KC.")==-1){ /* 2016.07.22 */ flg=15; } @@ -311,16 +312,30 @@ public class KetCindyPlugin extends CindyScriptPlugin { @CindyScript("iskcexists") public static boolean iskcexists(String dir){ - File file = new File(dir+"/kc.sh"); - if(file.exists()){ - file.setExecutable(true,false); - //16.10.19 - return true; - } - else{ - return false; - } - } + if(ismacosx()){ + File file = new File(dir+"/kc.command"); + if(file.exists()){ + file.setExecutable(true,false); + //16.10.19 + return true; + } + else{ + return false; + } + } + if(islinux()){ + File file = new File(dir+"/kc.sh"); + if(file.exists()){ + file.setExecutable(true,false); + //16.10.19 + return true; + } + else{ + return false; + } + } + return false; + } @CindyScript("pathsep") // 17.09.06 @@ -357,13 +372,14 @@ public class KetCindyPlugin extends CindyScriptPlugin { if (!file.exists()) { return ""; } - FileReader fileReader = new FileReader(file); - BufferedReader bufferedReader = new BufferedReader(fileReader); +// FileReader fileReader = new FileReader(file); +// BufferedReader bufferedReader = new BufferedReader(fileReader); + BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8")); String data; - while ((data = bufferedReader.readLine()) != null) { - res=res+data+"//"; + while ((data = br.readLine()) != null) { + res=res+data+"/LF/"; } - bufferedReader.close(); + br.close(); } catch (IOException e) { e.printStackTrace(); } diff --git a/Master/texmf-dist/doc/support/ketcindy/source/howtoinstall/HowToInstallE.tex b/Master/texmf-dist/doc/support/ketcindy/source/howtoinstall/HowToInstallE.tex new file mode 100644 index 00000000000..85a7d653ab2 --- /dev/null +++ b/Master/texmf-dist/doc/support/ketcindy/source/howtoinstall/HowToInstallE.tex @@ -0,0 +1,72 @@ +\documentclass{article} +\usepackage{ketpic,ketlayer} +\usepackage{amsmath,amssymb} +\usepackage{graphicx} +\usepackage{xcolor} +\usepackage{bm,enumerate} +\usepackage[colorlinks=true,urlcolor=blue]{hyperref} + +\setmargin{20}{20}{20}{20} + +\renewcommand{\labelitemi}{$\cdot$} + +\begin{document} + +\begin{center} +installing of KeTCindy +\end{center} + +\hfill Modified\ :\ \today + +\begin{enumerate}[\bf\large 1.] +\item Install Cinderella, R and Maxima. + \begin{itemize} + \item \url{https://beta.cinderella.de} (Cinderella) + \item \url{https://cran.r-project.org} (R) + \item \url{https://sourceforge.net/projects/maxima/files} (Maxima) + \item \url{https://www.sumatrapdfreader.org/download-free-pdf-viewer.html} (Sumatra)\\ + \hspace*{10mm}Rem) Sumatra is only for Windows. + + \end{itemize} +\item Install TeX if any TeX has not been installed. + \begin{enumerate}[(1)] + \item TeXLive is recommended. + \begin{itemize} + \item Files necessary for KeTCindy have been implemented (2018 or later). + \begin{enumerate}[i)] + \item texmf-dist/scripts/ketcindy ketlib, setketcindy, ketoutset, etc. + \item texmf-dist/tex/latex/ketcindy Style files for ketcindy + \item texmf-dist/doc/support/ketcindy Manuals and source files + \end{enumerate} + \end{itemize} + \item KeTTeX is a light-weight TeXLive. + \begin{itemize} + \item Download from\\ + \hspace*{5mm}Mac (kettex.dmg)\\ + \hspace*{10mm}\url{https://www.dropbox.com/s/dc4inuk06t07g26/kettex.dmg?dl=0}\\ + \hspace*{5mm}Windows (kettex.exe)\\ + \hspace*{10mm}\url{https://www.dropbox.com/s/fthw4btjqqs33tc/kettex.exe?dl=0}\\ + \hspace*{5mm}Linux (kettex.tar.xz)\\ + \hspace*{10mm}\url{https://www.dropbox.com/s/vg8p07832e9hzlk/KeTTeX-linux-20171022.tar.xz?dl=0} + \item Move kettex generated by double clicking to the folder as follows.\\ + \hspace*{10mm}Mac\ \ /Applications,Windows\ \ C:\ + \end{itemize} + \item In case of other TeX, see Readme in ketcindy of {\bf 3.}(2). + \end{enumerate} + +\item Install KeTCdindy + \begin{enumerate}[(1)] + \item Download ketcindy from CTAN(\url{https://ctan.org}).\\ + \hspace*{10mm}Search ketcindy > Package ketcindy > download + \begin{itemize} + \item[Rem)]The latest version can be download from Repository:\\ + \hspace*{5mm}\url{https://github.com/ketpic/ketcindy}\\ + \hspace*{10mm}Clone or download > Download ZIP + \item[Rem)]Download ketcindy-master as follows\\ + \hspace*{10mm}Clone or download > Download ZIP + \end{itemize} + \item Install KeTCindy according to Readme in forMac/forWindow/forLinux. + \end{enumerate} +\end{enumerate} + +\end{document}
\ No newline at end of file diff --git a/Master/texmf-dist/doc/support/ketcindy/source/howtoinstall/HowToInstallJ.tex b/Master/texmf-dist/doc/support/ketcindy/source/howtoinstall/HowToInstallJ.tex new file mode 100644 index 00000000000..b077cd507cb --- /dev/null +++ b/Master/texmf-dist/doc/support/ketcindy/source/howtoinstall/HowToInstallJ.tex @@ -0,0 +1,68 @@ +\documentclass{ujarticle} +\usepackage{ketpic,ketlayer} +\usepackage{amsmath,amssymb} +\usepackage{graphicx} +\usepackage{xcolor} +\usepackage{bm,enumerate} +\usepackage[dvipdfmx,colorlinks=true,urlcolor=blue]{hyperref} + +\setmargin{20}{20}{20}{20} + +\西暦 + +\renewcommand{\labelitemi}{・} + +\begin{document} + +\begin{center} +KETCindyのインストール +\end{center} + +\hfill 修正日:\today + +\begin{enumerate}[\bf\large 1.] +\item Cinderella, R, Maxima をインストールする. + \begin{itemize} + \item \url{https://beta.cinderella.de} (Cinderella) + \item \url{https://cran.r-project.org} (R) + \item \url{https://sourceforge.net/projects/maxima/files} (Maxima) + \item \url{https://www.sumatrapdfreader.org/download-free-pdf-viewer.html} (Sumatra)\\ + \hspace*{10mm}注)SumatraはWindowsだけである. + \end{itemize} +\item TeXをインストールしていない場合はインストールする. + \begin{enumerate}[(1)] + \item TeXLiveを推奨 + \begin{itemize} + \item 2018以降ではketcindyが既に入っている. + \end{itemize} + \item KeTTeXはTeXLiveの軽量版 + \begin{itemize} + \item 以下からダウンロードできる.\\ + \hspace*{5mm}Mac (kettex.dmg)\\ + \hspace*{10mm}\url{https://www.dropbox.com/s/dc4inuk06t07g26/kettex.dmg?dl=0}\\ + \hspace*{5mm}Windows (kettex.exe)\\ + \hspace*{10mm}\url{https://www.dropbox.com/s/fthw4btjqqs33tc/kettex.exe?dl=0}\\ + \hspace*{5mm}Linux (kettex.tar.xz)\\ + \hspace*{10mm}\url{https://www.dropbox.com/s/vg8p07832e9hzlk/KeTTeX-linux-20171022.tar.xz?dl=0} + \item ダブルクリックしてできるkettexを以下に入れる.\\ + \hspace*{10mm}Mac\ \ /Applications,Windows\ \ C:\ + \end{itemize} + \item 他のTeXの場合は,{\bf 3.}(2)のReadmeを参照する. + \end{enumerate} + +\item KeTCindyのインストール + \begin{enumerate}[(1)] + \item ketcindyをCTAN(\url{https://ctan.org})からダウンロードする.\\ + \hspace*{10mm}ketcindyで検索 > Package ketcindy > download + \begin{itemize} + \item[注)]最新版は,Repositoryのサイト\\ + \hspace*{10mm}\url{https://github.com/ketpic/ketcindy}\\ + から以下のようにダウンロードできる.\\ + \hspace*{10mm}Clone or download > Download ZIP + \item[注)]この場合は,ketcindy-masterになる. + \end{itemize} + \item forMac/forWindow/forLinuxにあるReadmeに従って,インストールする. + \end{enumerate} +\end{enumerate} + +\end{document}
\ No newline at end of file diff --git a/Master/texmf-dist/doc/support/ketcindy/source/ketmanual/KeTCindyReferenceE.tex b/Master/texmf-dist/doc/support/ketcindy/source/ketmanual/KeTCindyReferenceE.tex index ecec1632a56..e3b86464ef9 100644 --- a/Master/texmf-dist/doc/support/ketcindy/source/ketmanual/KeTCindyReferenceE.tex +++ b/Master/texmf-dist/doc/support/ketcindy/source/ketmanual/KeTCindyReferenceE.tex @@ -156,12 +156,16 @@ Hide coordinate axes. \itemket{Description}Generic function to set the style of axis. \itemket{Details}Parameters are:\\ 1. Style of axis ("l" ; line(default), "a" : arrow)\\ -2. Name of horizontal ax ( default is x)\\ -3. Posion of horizontal name (default is "e")\\ -4. Name of horizontal ax ( default is y)\\ -5. Posion of horizontal name (default is "n")\\ -6. Name of origin (default is O)\\ -7. Position of origin (default is "sw") +\hspace*{10mm}Rem)Write like \verb|"a0.5"| when setting the size.\\ +2. Name of horizontal ax ( default is \verb|"x"|)\\ +3. Posion of horizontal name (default is \verb|"e"|)\\ +4. Name of horizontal ax ( default is \verb|"y"|)\\ +5. Posion of horizontal name (default is \verb|"n"|)\\ +6. Name of origin (default is \verb|"O"|)\\ +7. Position of origin (default is \verb|"sw"|)\\ +8. Line style\\ +9. Color of axes\\ +10. Color of labels\\ \itemket{Examples}\mbox{} \verb|Setax(["a","","","","","","nw"]);|\\ @@ -676,6 +680,15 @@ This Point P on the asteroid can be move along the curve on the Euclidean view. \end{center} \end{cmd} +%-------------Setarrow------------------------------ +\begin{cmd}{Setarrow}{setarrow} +\itemket{Usage}Setarrow([arrowsize,angle,position,cut,linestyle]); +\itemket{Description}Generic function to set styles of arrows. +\itemket{Details}Defaults are arrowsize(1),angle(18),position(1),cut(1),linestyle("dr"). +\verb|-1| means to unchange the default. +\itemket{Examples}Setsarrow([-1,30,-1,0.2]); +\end{cmd} + %------------Arrowdata-------------------------------- \begin{cmd}{Arrowdata}{arrowdata} \itemket{Usage}Arrowdata(name,[starting point, ending point] , options) @@ -3032,7 +3045,6 @@ Perform multiple replacements by list. \verb|Assign("a*x^2+b*x",["a",1,"b",2]);| \hspace{10mm}// \verb|a| $\to$ \verb|1 and b| $\to$ \verb|2| \end{cmd} - %-----------BBdata--------------------------------- \begin{cmd}{BBdata}{bbdata} \itemket{Usage}BBdata(file name, options); @@ -3050,6 +3062,19 @@ The image files are PDF, PNG, JPG, and so on.\\ \includegraphics[bb=0.00 0.00 562.03 124.01,width=12cm]{Fig/bbdata.pdf} \end{cmd} +%-----------Asin--------------------------------- +\begin{cmd}{Asin}{asin} +\itemket{Usage}Asin(real) , Acos(real) +\itemket{Description} Return arcsine and arccosine. + +\end{cmd} + +%-----------Sqr--------------------------------- +\begin{cmd}{Sqr}{sqr} +\itemket{Usage}Sqr(real) +\itemket{Description} Return square root. + +\end{cmd} %---------Colorcode----------------------------------- \begin{cmd}{Colorcode}{colorcode} @@ -5251,6 +5276,7 @@ Options are the followings.\\ {\bf Drawing} \> \\ \hyperlink{addgraph}{AddGraph} \> manipulate more than one PD all together.\\ \hyperlink{anglemark}{Anglemark} \> draw an angle mark.\\ +\hyperlink{setarrow}{Setarrowdata} \> set styles of arrows.\\ \hyperlink{arrowdata}{Arrowdata} \> draw an arrow line between two points.\\ \hyperlink{arrowhead}{Arrowhead} \>draw an arrowhead with specified direction at a designated point.\\ \hyperlink{bezier}{Bezier} \> draw a Bezier curve.\\ @@ -5318,6 +5344,7 @@ Options are the followings.\\ \hyperlink{vtickmark}{Vtickmark} \> tick on the vertical ax.\\ {\bf Calculus and I/O} \> \\ +\hyperlink{asin}{Asin} \> return arcsine and arccosine.\\ \hyperlink{crossprod}{Crossprod} \> return the cross product of 2 vectors.\\ \hyperlink{derivative}{Derivative} \> find the derivative of a function or a plotting data.\\ \hyperlink{dotprod}{Dotprod} \> return the dot product of 2 vectors.\\ @@ -5336,6 +5363,7 @@ Options are the followings.\\ \hyperlink{ptstart, ptend}{Ptstart, Ptend} \> returns start point and end point of PD.\\ \hyperlink{ptcrv}{Ptcrv} \> Returns n-th point from PD.\\ \hyperlink{readoutdata}{ReadOutData} \> read external data.\\ +\hyperlink{sqr}{Sqr} \> return square root.\\ \hyperlink{writeoutdata}{WriteOutData} \> write out data in \ketcindy\ format.\\ {\bf Making Table} \> \\ diff --git a/Master/texmf-dist/doc/support/ketcindy/source/ketmanual/KeTCindyReferenceJ.tex b/Master/texmf-dist/doc/support/ketcindy/source/ketmanual/KeTCindyReferenceJ.tex index 9ca5cfb90a2..933210c7afe 100644 --- a/Master/texmf-dist/doc/support/ketcindy/source/ketmanual/KeTCindyReferenceJ.tex +++ b/Master/texmf-dist/doc/support/ketcindy/source/ketmanual/KeTCindyReferenceJ.tex @@ -136,7 +136,7 @@ Parent ボタンで出力するファイル名は 初期設定がないので, \hypertarget{addax}{} \item[関数] Addax(0または1) \item[機能] 座標軸の表示 -\item[説明] 引数が1のとき座標軸を描き,0のとき描かない。ただし,描画面には座標軸は表示されない。 +\item[説明] 引数が1のとき座標軸を描き,0のとき描かない。 初期設定は1で,座標軸を描かない場合のみ \verb|Addax(0)| とすればよい。 \vspace{\baselineskip} @@ -160,25 +160,43 @@ Parent ボタンで出力するファイル名は 初期設定がないので, 引数はリストで与え,要素は順番に -1. 軸の形状(直線は "l" ,矢印は "a") 初期設定は直線 +1. 軸の形状(直線は "l" ,矢印は "a") 初期設定は直線\\ + 矢印の大きさの倍率を指定するときは,"a0.5"のようにする。\\ + また,矢印のスタイルは Setarrowで指定する。 -2. 横軸名 初期設定は $x$ +2. 横軸名 初期設定は \verb|"x"| -3. 横軸名の位置 +3. 横軸名の位置 初期設定は \verb|"e"| -4. 縦軸名 初期設定は$y$ +4. 縦軸名 初期設定は \verb|"y"| -5. 縦軸名の位置 +5. 縦軸名の位置 初期設定は \verb|"n"| -6. 原点名 初期設定はO +6. 原点名 初期設定は \verb|"O"|(文字として書かれる) -7. 原点名の位置 +7. 原点名の位置 初期設定は \verb|"sw"| -それぞれダブルクウォートでくくる。 +<<<<<<< HEAD +8. 線種 -7つの引数のうちn番目だけを指定する場合は,[n,"内容"]で指定できる。 +9. 色 -また,後方は 初期設定なら省略できる。 +10. 文字の色 + +それぞれダブルクウォートでくくる。色は,色名が使える。"red" など。 + +10の引数のうちn番目だけを指定する場合は,[n,"内容"]で指定できる。 +======= +8. 線スタイル + +9. 線の色 +>>>>>>> 8640fc8c8ce40892b14715d7a28d85d1079ee61b + +10.ラベルの色 + +n番目以降を指定する場合は,[n,"内容"]で指定できる。 + +また,後方は省略できる。 \vspace{\baselineskip} 【例】座標軸の先端を矢印にし,原点の北西にOを書く。 @@ -189,6 +207,10 @@ Parent ボタンで出力するファイル名は 初期設定がないので, \hspace{10mm} \verb|Setax([7,"nw"]);| +【例】軸を赤の点線にする。 + +\hspace{10mm} \verb|Setax(["","","","","","","","do","red"]);| + 【例】先端を矢印にし,横軸を$\theta$,縦軸を$x$にして矢じりの左側に書く。 \hspace{10mm} \verb|Setax(["a","\theta","","x","w"]);| @@ -365,6 +387,14 @@ Plotdata("1","f(x)","x"); \end{verbatim} \hspace{10mm}\input{Fig/pointsize} +\hypertarget{setarrow}{} +\item[関数] Setarrow(size,angle,position,cut,segstyle) +\item[機能] 矢線の形状の設定をする。 +\item[説明] 引数は,順に,矢じりの大きさ, 開き角, 矢じり位置, 切り込み位置, 線種と表示色 + +それぞれの意味と値は,\hyperlink{arrowdata}{Arrowdata()} を参照のこと。 + +\vspace{\baselineskip} \hypertarget{setmarklen}{} \item[関数] Setmarklen(数) \item[機能] 座標軸の目盛の長さを設定する @@ -862,6 +892,8 @@ optionsは矢じりの形状などの指定。 トリミング : "Cutend=m" または "Cutend=[m,n]" で,右辺が数のときは両端をmだけカットする。リストのときは始点をm,終点をnだけカットする。mが負のときは延長する。 +これらの設定は,\hyperlink{setarrow}{Setarrow()} で初期設定を変更することができる。 + \vspace{\baselineskip} 【例】オプションの設定とその結果を示す。 @@ -894,6 +926,13 @@ optionsは矢じりの形状などの指定。 円A,Bの半径が同じ(たとえば0.5)であれば,\verb|Arrowdata([A,B],["Cutend=0.5"]);| でよい。 +\vspace{\baselineskip} +\hypertarget{setarrow}{} +\item[関数] Setarrow([arrowsize,angle,position,cut,linestyle]) +\item[機能] Arrowdata,Arrowheadで描く矢印のスタイルを設定する。 +\item[説明] arrowsize,angle,position,cut,linestyleは,順に大きさ(1),開き角(18),位置(1),切り込み(0),矢線スタイル("dr")である。(カッコ内はデフォルト値) + + %\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} \vspace{\baselineskip} \hypertarget{arrowhead}{} @@ -2043,7 +2082,7 @@ options は線種が有効 \vspace{\baselineskip} \hypertarget{expr}{} -\item[関数] Expr([座標 , 位置 , 文字列]) +\item[関数] Expr([座標 , 位置 , 文字列],option) \item[機能] \TeX 記法の文字列を与えて数式を書く。 \item[説明] Letterで文字列の前後に\$ \$をおくのと同じ。 @@ -2051,6 +2090,8 @@ options は線種が有効 複数の箇所に文字を書く場合は,Letter() と同様,引数をリストにして与える。 +optionは フォントサイズで,["size=32"] のように指定する。 + \vspace{\baselineskip} 【例】 $f(x)=\dfrac{1}{4} x^2$ とその導関数 $f'(x)=\dfrac{1}{2} x$ の式,軸上に必要な数を入れる。 \begin{verbatim} @@ -2078,16 +2119,18 @@ options は線種が有効 \vspace{\baselineskip} \hypertarget{exprrot}{} -\item[関数] Exprrot([座標 , 向き , 方向,文字列]) +\item[関数] Exprrot(座標 , 向き , 方向,文字列,option) \item[機能] \TeX 記法の文字列を与えて傾いた数式を書く。 \item[説明] 「座標」の位置に,指定された向きで数式を書く。 向きはベクトルで与える。 -方向はオプションで, t (ベクトルと同じ向き) と n(ベクトルと垂直な向き) の両方を数字つきで与える。ただし,方向はオプション。 +方向は t (ベクトルと同じ向き) と n(ベクトルと垂直な向き) の両方を数字つきで与える。ただし,方向はオプション。 座標,向きとも,Cinderellaで作図した幾何点を用いることができる。 +optionは フォントサイズで,["size=32"] のように指定する。 + \begin{verbatim} Exprrot([3,2],[2,-1],"t0n1","\sqrt{3}"); Exprrot(C,B-A,"\frac{2}{3}"); @@ -2097,7 +2140,7 @@ options は線種が有効 \hspace{10mm}\includegraphics[bb=0.00 0.00 181.01 131.01,width=4cm]{Fig/exprrot.pdf} \hspace{10mm} \input{Fig/exprrot} \vspace{\baselineskip} -\hypertarget{letter}{}\item[関数] Letter([位置, 方向, 文字列]) +\hypertarget{letter}{}\item[関数] Letter([位置, 方向, 文字列],option) \item[機能] 文字列を表示する \item[説明] 「位置(座標)」と方向で指定された場所に文字を書き込む。 @@ -2112,6 +2155,14 @@ options は線種が有効 注)導関数の記号$'$は,数式モード(\$ ではさむ)で$'$(シングルクウォート)を用いる。 +optionは フォントサイズで,["size=32"] のように指定する。 + +文字列が一つのときは, + +Letter(位置, 方向, 文字列,option) + +にできる。 + \vspace{\baselineskip} 【例】 @@ -2128,12 +2179,14 @@ options は線種が有効 \hspace{10mm} \verb|Letter([A,"sw","A",E,"s","$ f(x)=\frac{1}{4} x^2 $"]);| \vspace{\baselineskip} -\hypertarget{letterrot}{}\item[関数] Letterrot(座標, 方向ベクトル,移動量, 文字列) +\hypertarget{letterrot}{}\item[関数] Letterrot(座標, 方向ベクトル,移動量, 文字列,option) \item[機能] 文字列を回転して表示する \item[説明] 座標で示された位置に,方向ベクトルで指定された向きに回転して文字を書き込む。 第3引数は微小移動量で,略すこともできる。 +optionは フォントサイズで,["size=32"] のように指定する。 + \begin{verbatim} Letterrot(C,B-A,"t2n5","AB"); \end{verbatim} @@ -3287,6 +3340,19 @@ end//// 計算値やプロットデータの値を取得したり,R用とのデータのやりとりをする。 \begin{description} + +\hypertarget{asin}{} +\item[関数] Asin(実数),Acos(実数) +\item[機能] 逆三角関数の値を求める。 +\item[説明] CindyScriptの組み込み関数に,arcsin(x),arccos(x) があるが,xの絶対値が1より大きい場合は虚数を返す。このことがRではエラーになるので,計算誤差により1よりわずかに大きくなる場合のために用意した関数。 + +\vspace{\baselineskip} +\hypertarget{sqr}{} +\item[関数] Sqr(実数) +\item[機能] 平方根を求める。 +\item[説明] CindyScriptの組み込み関数に,sqrt(x) があるが,xが負の場合は虚数を返す。これに対し,xが負の場合は0を返すようにした関数。計算誤差により1よりわずかに大きくなる場合のために用意した。 + +\vspace{\baselineskip} \hypertarget{bbdata}{} \item[関数] BBdata(ファイル名,option) \item[機能] 画像ファイルのサイズを求める @@ -3911,7 +3977,7 @@ KeTCindyの関数の中には処理に時間がかかるものがある。その \verb| );| \vspace{\baselineskip} -\hspace{5mm} 点Aをドラッグ中(選択状態)\hspace{5mm} 他の点をクリックして選択状態を解除 +\hspace{5mm} 点Aをドラッグ中(選択状態)\hspace{5mm} 点A以外をクリックして選択状態を解除 \hspace{10mm}\includegraphics[bb=0.00 0.00 218.01 204.51,width=40mm]{Fig/ptselected01.pdf} \hspace{10mm}\includegraphics[bb=0.00 0.00 219.01 204.51,width=40mm]{Fig/ptselected02.pdf} @@ -5851,7 +5917,7 @@ Settitleのオプションは次をリストで与える。 \end{description} \newpage -%================== 3D =============== +%================== 3D 概要 =============== \section{\ketcindy 3D} \subsection{概要} \ketcindy 3Dの画面は次のように構成される。 @@ -5873,8 +5939,9 @@ Cinderellaの描画面に,白の矩形で囲んだ領域が2つできる。NE, KeTCindy3Dでは,線や面についての陰線処理を行う。陰線処理はC言語との連携により処理を速めている。C言語を使う環境整備が必要であるが,現在はこれを標準としている。C言語が使えない場合はRで計算する関数を用いることになるが,その場合はかなり時間がかかる。(場合にもよるが2分程度) +%================== 3D 設定 =============== \newpage -\subsection{設定・定義} +\subsection{設定} \begin{description} @@ -5889,6 +5956,7 @@ Cinderellaの描画面に,視点移動のための2つのスライダを作る この関数は Initialization スロットに置く。Ketinit() も,平面の場合と異なり Initialization スロットに置く。KeTCindy3Dにおける変数の初期化などを行う,Start3d()はDrawスロットに書く。 +%---------------- Start3d -------------------------------------------- \vspace{\baselineskip} \hypertarget{start3d}{} \item[関数] Start3d(option) @@ -5901,6 +5969,7 @@ Cinderellaの作図ツールで,点・線分を作図すると,内部関数 optionに,除外点のリストを与えると,その点は空間点としない。(始点を移動しても位置は変わらない) + %---------------- Startsurf -------------------------------------------- \vspace{\baselineskip} \hypertarget{startsurf}{} \item[関数] Startsurf(options) @@ -5921,43 +5990,204 @@ optionsがないときは,以下の 初期設定を用いる。 (3) ExeccmdC(); で,C言語を用いてまとめて描画する。 +%-------------------Xyzcoord ----------------------------------------------- +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} +\hypertarget{xyzax3data}{} +\item[関数] Xyzax3data(name,xの範囲,yの範囲,zの範囲,options) +\item[機能] 座標軸を描く +\item[説明] 描画面に座標軸を描き,プロットデータ ax3d を作成する。nameは空文字列でよい。option は次の2つ。 + +矢じり:"an":nは数字で矢じりの大きさ。nはなくてもよい。 + +原点O:"Onesw":neswは微小位置。数字も付けられる。neswをつけない場合の初期値はsw。 + +【例】 初期設定の座標軸\\ +\verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]");| + + 矢じりをつける + + \verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]","a");| + + 矢じりを大きくする + + \verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]",["a2"]);| + +原点のOを表示する。 + + \verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]",["O"]);| + + 原点のOの位置を調整して右上に表示する。やじりもつける。 + + \verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]",["a","Oe2n2"]);| + + +【注意】Putaxes3d() で点を取ると原点に点Oが作成される。この点名Oと表示が重複するのが煩わしい場合は,作図後にこのoptionをつけてから出力するとよい。 + +\end{description} +%================== 3D 描画 =============== + +\newpage +\subsection{描画} + +%================== 3D 点・線 =============== +\subsubsection{点・線} + +\begin{description} + %---------------- Drawpoint3d -------------------------------------------- +\hypertarget{drawpoint3d}{} +\item[関数] Drawpoint3d(座標) +\item[機能] 空間点を描く +\item[説明] 引数で与えた空間座標の点を描く。この点は幾何点ではない。また,TeX にも出力されない。幾何点にするには \hyperlink{putpoint3d}{Putpoint3d()} を用いる。TeXに点を出力するには,\hyperlink{pointdata3d}{Pointdata3d()} を用いる。 + +引数は,座標のリストにすることもできる。 \vspace{\baselineskip} -\hypertarget{isangle}{} -\item[関数] Isangle() -\item[機能] 角度スライダ(視点スライダ)の選択判断 -\item[説明] 角度スライダを選択しているときは true ,そうでないときは false を返す。 +【例】 +\begin{verbatim} + Drawpoint3d([1,1,1]); + Drawpoint3d([[1,1,1],[0,1,0]]); +\end{verbatim} -曲面の描画・陰線処理には時間がかかるため,角度スライダを動かすと反応が悪くなる。そこで,角度スライダを選択しているときは曲面の描画をしないようにすることで反応がよくなる。 +\vspace{\baselineskip} + %---------------- Pointdata3d -------------------------------------------- +\hypertarget{pointdata3d}{} +\item[関数] Pointdata3d(名前,点リスト,options) +\item[機能] 点の3Dデータと2Dデータを作成し,画面と\TeX に出力する。 +\item[説明] optionsは\hyperlink{pointdata}{Pointdata()}と同様。 \vspace{\baselineskip} -【例】放物面の描画 -次のようにすると,スライダの点を選んでいる間はワイヤフレームモデルが描かれ,画面上の他の部分をクリックして選択状態が解除されると陰線処理された放物面が描かれる。 +【例】 \begin{verbatim} - fd=[ - "z=4-(x^2+y^2)", - "x=R*cos(T)","y=R*sin(T)", - "R=[0,2]","T=[0,2*pi]","e" - ]; - if(Isangle(), - Sf3data("1",fd); - , - Startsurf(); - Sfbdparadata("1",fd); - Crvsfparadata("1","ax3d","sfbd3d1",fd); - ExeccmdC("1"); - ); + Pointdata3d("1",[[1,1,1],[0,1,0]],["Size=2","Color=red"]); \end{verbatim} +\vspace{\baselineskip} -\end{description} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} + %---------------- Putpoint3d---------------------------------------------- +\hypertarget{putpoint3d}{} +\item[関数] Putpoint3d(リスト,option) +\item[機能] 空間に幾何点を作図する +\item[説明] 点の名称と座標を与えて点を作図する。複数の点を一度に作図できる。 + +optionは,"fix"( 初期設定) または "free"。リスト ["free"] にしてもよい。 + +"fix" では,固定点(ドラッグで移動できない点)とする。同じ名称の点がすでに存在する場合は,指定した位置に移動して固定点とする。 + +"free" では,自由点(ドラッグで移動できる)とする。同じ名称の点がすでに存在する場合はなにもしない。 + +\vspace{\baselineskip} +【例】いくつか記述例を示す。 + + \verb|Putpoint3d(["A",[2,1,3]]);| + + \verb|Putpoint3d(["A",[1,1,1],"C",[1,0,1]],"fix");| + + \verb|Putpoint3d(["A",[2,1,3]],"free");| + +\vspace{\baselineskip} + なお,この関数は幾何点を作るものであり,TeXには出力されない。TeXに点を出力するには,\hyperlink{pointdata}{Pointdata()} または \hyperlink{drwpt}{Drawpoint()}を併用する。 + + 空間における点の座標は,点名に"3d"を付加した名前の変数に代入される。たとえば,点Aの座標はA3dである。これにより,点の座標を取得できる。 \begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\newpage -\subsection{描画} -\begin{description} + %---------------- Putaxes3d--------------------------------------------- +\vspace{\baselineskip} +\hypertarget{putaxes3d}{} +\item[関数] Putaxes3d([x,y,z]) +\item[機能] 軸上に幾何点を作る。 +\item[説明] 引数のリスト [x,y,z] に対し,点X(x,0,0) ,Y(0,y,0) , Z(0,0,z) および 原点Oを主画面上にとり,副画面上に対応する点Xz,Yz,Zz,Oz を作る。すでに同じ名称の点がある場合は,指定された位置に移動する。 + +引数は,実数にすることもでき,Putaxes3d(a) は,Putaxes3d([a,a,a]) と同じになる。 + +\vspace{\baselineskip} +【例】 + +Putaxes3d(5); 原点と,$x(5,0,0),y(0,5,0),z(0,0,5)$ を作る。 +Putaxes3d([1,2,3]); 原点と,$x(1,0,0),y(0,2,0),z(0,0,3)$ を作る。 + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + %---------------- PutonCurve3d--------------------------------------------- +\vspace{\baselineskip} +\hypertarget{putonCurve3d}{} +\item[関数] PutonCurve3d(点名,PD) +\item[機能] 空間曲線上に点をとる +\item[説明] プロットデータPDの曲線上に,点名の点をとる。 + +とった点は固定点ではなく,曲線上にインシデントとなる。したがって,ドラッグして曲線上を動かすことができる。例は \hyperlink{partcrv3d}{Partcrv3d()} を参照のこと。 + %---------------- Putonseg3d---------------------------------------------- +\vspace{\baselineskip} +\hypertarget{putonseg3d}{} +\item[関数] Putonseg3d(点名,点1,点2) +\item[機能] 線分上に点を作る +\item[説明] 点1と点2の中点に,指定された名前の点を取る。点1と点2が線分として結ばれていなくてもよい。とった点は線分にインシデントとなる(線分が描かれていなくても)。点1と点2はリストにすることもできる。指定した点がすでに存在する場合は動かさない。 + +点1,点2は幾何点の名称または座標で指定する。 + +\vspace{\baselineskip} +【例】A(1,-1,0)とB(0,2,2) の中点に点Cをとる。つぎのいずれでもよい。 + + \verb|Putonseg3d("C",A,B);| + + \verb|Putonseg3d("C",[A,B]);| + + \verb|Putonseg3d("C",[[1,-1,0],[0,2,2]]);| + +\vspace{\baselineskip} + +%------------------ Spaceline----------------------------------------------- +\hypertarget{spaceline}{} +\item[関数] Spaceline(name,list) +\item[機能] 折れ線を描く +\item[説明] 点の名称または座標のリストを与えて折れ線を描く。平面での Listplot() にあたる。 + +options は線種(dr,da,do) + +\vspace{\baselineskip} +【例】いくつか示す。 + +・Spaceline("1",[[2,5,1],[4,2,3]]); 指定された2点を結んだ線分を描く。 + +・Spaceline("2",[A,B,C,A]); 作図されている2点A,B,Cを結んだ三角形を描く。 + + +・節点を表示する場合は,Pointdata3d() で描画する。 + +\begin{layer}{150}{0} +\putnotese{80}{10}{ \input{Fig/oresenex01}} +\end{layer} +\begin{verbatim} + pt=[[2,0,0],[2,0,2],[2,2,2],[0,2,2],[0,4,2],[0,4,4]]; + Spaceline("1",pt); + Pointdata3d("1",pt,["Size=3"]); +\end{verbatim} + +点の名前が必要であれば + +\verb|pname=apply(1..6,"P"+text(#));| + +のようにして,名前リストを作ることができる。 +\vspace{\baselineskip} +%------------------ Spacecurve----------------------------------------------- +\hypertarget{spacecurve}{} +\item[関数] Spacecurve(name,式,定義域,options) +\item[機能] 空間曲線を描く +\item[説明] 媒介変数で表された曲線を描く。optionは解像度 Num + +\vspace{\baselineskip} +【例】螺旋を描く + +\verb|Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["Num=100"]);| + +\vspace{\baselineskip} + \begin{center} \input{Fig/rasen} \end{center} + + + %---------------- Bezier3d----------------------------------------------- \hypertarget{bezier3d}{} \item[関数] Bezier3d(name,リスト1,リスト2) \item[機能] 空間ベジェ曲線を描く @@ -5984,398 +6214,265 @@ optionsがないときは,以下の 初期設定を用いる。 \begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\hypertarget{changestyle3d}{} -\item[関数] Changestyle3d(リスト,リスト) -\item[機能] 3Dプロットデータの属性を変更 -\item[説明] 第1引数のプロットデータの属性を,第2引数に変更する。 - -たとえば,補助線など,画面には描いてもTeXに書き出さない線を描画するときは,optionに["notex"] をつけるが,これをあとから付加したい場合に利用する。プロットデータはリストにできるので,複数のプロットデータの属性をまとめて変更することができて便利である。 - -\vspace{\baselineskip} -【例】4つの点で四面体の辺を描き,まとめて notex にする。点A,B,C,Dはとってあるものとする。 -\begin{verbatim} - Spaceline("1",[A,B]); - Spaceline("2",[A,C]); - Spaceline("3",[B,C]); - Spaceline("4",[A,D]); - Spaceline("5",[B,D]); - Spaceline("6",[C,D]); - edges=apply(1..6,"sl3d"+text(#)); - Changestyle3d(edges,["notex"]); -\end{verbatim} - -\hypertarget{concatobj}{} -\item[関数] Concatobj(リスト,option) -\item[機能] いくつかのobjデータを結合する -\item[説明] 多面体の各面の頂点リストから面データ(頂点リストと面リスト)を作る。 - +%------------------ Mkbezierptcrv3d----------------------------------------------- \vspace{\baselineskip} -【例】4点A,B,C,Dを頂点とする四面体を描く。 +\hypertarget{mkbezierptcrv3d}{} +\item[関数] Mkbezierptcrv3d(点リスト) +\item[機能] 制御点を自動的にとる空間ベジェ曲線 +\item[説明] リストで与えた点に対し,制御点を自動的に生成してベジェ曲線を描く。 -四面体は4つの面からなっている。頂点をA,B,C,Dとすると,4つの面は - - △ABC,△ABD,△ACD,△BCD\\ -である。 - - \begin{center} \input{Fig/concatobj} \end{center} - -そこで + 制御点は,2つの点に対して,その点を端点とする線分上に2つ作られる。これを適宜移動して任意の曲線にすることができる。\hyperlink{bezier3d}{空間ベジェ曲線 Bezier3d()} を参照のこと。 - \verb|Concatobj([[A,B,C],[A,B,D],[A,C,D],[B,C,D]]);| +\vspace{\baselineskip} +【例】\verb|Mkbezierptcrv3d(["A","B","C","D"]);|\\ + 線分AB上に2点a1p,a2p,線分BC上に2点a2p,a2q,線分CD上に2点a3p,a3qができる。 -とすると,面データ [[A,B,C,D],[[1,2,3],[1,2,4],[1,3,4],[2,3,4]]] が返される。 - -この面データを使って四面体を描くことができる。コード例は,\hyperlink{vertexedgeface}{VertexEdgeFace()} を参照のこと。 \begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\hypertarget{crvsfparadata}{} -\item[関数] Crvsfparadata(name,PD1,PD2,式) -\item[機能] 曲面による曲線の陰線処理を行う。 -\item[説明] 曲線PD1を表示するにあたり,曲面PD2によって隠れる部分処理を行う。 +\vspace{\baselineskip} +%------------------ Skeletonparadata----------------------------------------------- +\hypertarget{skeletonparadata}{} +\item[関数] Skeletonparadata(name,PDリスト,PDリスト,option) +\item[機能] 陰線処理(スケルトン処理)をおこなう +\item[説明] 描画されている線と軸について陰線処理をおこなう。 -曲面PD2のプロットデータを作るため,Sfbdparadata() も同時に用いることになる。nameは,Sfbdparadata() と同じものにする。 +第2引数の線(プロットデータ)が,第3引数の線(プロットデータ)によって隠される部分を消去する。第2,第3引数を省略した場合は,すべての線について,互いの陰線処理をおこなう。optionで消去する部分の長さを指定できる。\\ +他のオプション\\ + \verb|"No=点リスト"| 点リストの点が選ばれているときは実行しない\\ + \verb|"File=y/m/n (n)"| データファイルを作るか\\ + \verb|"Check=点リスト"| 点リストの点が変更されていたら,ファイルを作り直す -作図例は,\hyperlink{execcmdc}{ExeccmdC()} を参照のこと。 - -C言語が使えない場合は,CrvsfparadataR(name,PD1,PD2,式,options1,options2) を使う。 -options1 は分割数と誤差限界, options2 は陰線の線種。 \vspace{\baselineskip} -\hypertarget{datalist}{} -\item[関数] Datalist2d() -\item[機能] 画面上のプロットデータのリストを取得する -\item[説明] 画面に描かれているすべてのプロットデータのリストを返す。 - -空間図形は,Cinderellaの画面上に射影し表示する。そのため,KeTCindy3Dは,空間におけるプロットデータと,画面上に表示するプロットデータの2つを作っている。Datalist2d()では,画面上に表示するプロットデータのリストを返す。 +【例】螺旋と線分,座標軸の陰線処理 -\vspace{\baselineskip} -【例】 +次のように螺旋と線分,座標軸を描いておく。 \begin{verbatim} - Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]"); - Putpoint3d(["A",[0,-3,0],"B",[0,3,3]]); - Spaceline("1",[A,B]); - println("PD="+Datalist2d()); + Xyzax3data("","x=[-5,5]","y=[-5,4]","z=[-5,3]"); + Putpoint3d(["A",[0,-2,-2]]); + Putpoint3d(["B",[-1,1,3]]); + Spaceline([A,B]); + Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["Num=100"]); \end{verbatim} -とすると,コンソールに PD=[ax2d,AB2d] と表示される。ax2dは座標軸のプロットデータ ax3d に,AB2d は線分ABのプロットデータ AB3d に対応している。 +座標軸のプロットデータは ax3d,線分は AB3d,螺旋は sc3d1 である。これに対し, -\vspace{\baselineskip} -\hypertarget{datalist}{} -\item[関数] Datalist3d() -\item[機能] 空間のプロットデータのリストを取得する -\item[説明] 空間に描かれているすべてのプロットデータのリストを返す +\hspace{10mm} \verb|Skeletonparadata("1");| -\vspace{\baselineskip} -【例】 -\begin{verbatim} - Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]"); - Putpoint3d(["A",[0,-3,0],"B",[0,3,3]]); - Spaceline("1",[A,B]); - println("PD="+Datalist3d()); -\end{verbatim} -とすると,コンソールに PD=[ax3d,AB3d] と表示される。 + 描画されている線と軸について陰線処理をおこなう。(図左) +\hspace{10mm} \verb|Skeletonparadata("1",[2]);| -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + 重なった部分の空きを2にする。(図中央) + +\hspace{10mm} \verb|Skeletonparadata("1",["AB3d","ax3d"],["sc3d1"]);| + +螺旋によって隠れる部分だけ消去する。(図右) -\hypertarget{dist3d}{} -\item[関数] Dist3d(a1,a2) -\item[機能] 空間の2点間の距離を返す -\item[説明] 引数a1,a2 は作図点の名称,空間点の名称のいずれでもよい。 +\begin{center} \input{Fig/skeletonparadata01} \input{Fig/skeletonparadata02} + \input{Fig/skeletonparadata03} \end{center} -次の3通りの記法は同じ結果を返す。混在も可 -\begin{verbatim} - Dist3d("A","B"); - Dist3d(A,B); - Dist3d(A3d,B3d); -\end{verbatim} -\vspace{\baselineskip} +このほか,次も可能。 -\hypertarget{drawpoint3d}{} -\item[関数] Drawpoint3d(座標) -\item[機能] 空間点を描く -\item[説明] 引数で与えた空間座標の点を描く。この点は幾何点ではない。また,TeX にも出力されない。幾何点にするには \hyperlink{putpoint3d}{Putpoint3d()} を用いる。TeXに点を出力するには,\hyperlink{pointdata3d}{Pointdata3d()} を用いる。 +\hspace{10mm} \verb|Skeletonparadata("1",["AB3d","ax3d"],["sc3d1"],[2]);| -引数は,座標のリストにすることもできる。\\ -\vspace{\baselineskip} -【例】 -\begin{verbatim} - Drawpoint3d([1,1,1]); - Drawpoint3d([[1,1,1],[0,1,0]]); -\end{verbatim} -\vspace{\baselineskip} +\hspace{10mm} \verb|Skeletonparadata("1",["AB3d"],["ax3d","sc3d1"]);| -\hypertarget{execcmdc}{} -\item[関数] ExeccmdC(name,options1,options2) -\item[機能] 曲面を表示する。戻り値は,対象にしたプロットデータのリスト。 -\item[説明] データが作成された曲面を表示する。 -options1 には"r","m", "Wait=n" と輪郭線の線種が指定できる。Wait の初期値は20 +\end{description} - "r","m"に関しては,オプションなしまたは,”” のとき - - i) データファイルがなければ,新しく作る - - ii) データファイルが既にあればそれを読み込む - - "m" のとき,強制的にデータファイルを作り直す。 - - "r" のとき,すでにあるデータファイルを読み込む。 +%================== 3D 多面体 =============== +\subsubsection{多面体} + +多面体の描画について,四面体の場合を例にして説明する。 + +四面体は4つの面からなっている。頂点をA,B,C,Dとすると,4つの面は -options2 には 軸の陰線について "nodisp" または線種が指定できる。 初期設定は "do"。 +\hspace{20mm} △ABC,△ABD,△ACD,△BCD -options2だけを指定したい場合は,options1 を空リスト [ ] にする。 +である。 + \begin{center} \input{Fig/concatobj} \end{center} -\vspace{\baselineskip} -【例】回転放物面と座標軸,線分を陰線処理したデータを作って表示する。線分の端点A,Bはあらかじめ作図しておく。 +頂点のリスト[A,B,C,D] に対し,Aから順に番号をつけると,各面の頂点の順番は - 初期設定では陰線は点線で表示される。(下図左) -\begin{verbatim} - Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]"); - Putpoint3d(["A",[0,-3,0],"B",[0,3,3]]); - Spaceline([A,B]); - fd=["z=4-(x^2+y^2)","x=R*cos(T)","y=R*sin(T)","R=[0,2]","T=[0,2*pi]","e"]; - Startsurf(); - Sfbdparadata("1",fd); - Crvsfparadata("1","AB3d","sfbd3d1",fd); - Crvsfparadata("2","ax3d","sfbd3d1",fd); - ExeccmdC("1"); -\end{verbatim} -options2を ["nodisp"] にすると,陰線は非表示になる。(下図右) -\begin{verbatim} - ExeccmdC("1",[],["nodisp"]); -\end{verbatim} +\hspace{20mm}[1,2,3],[1,2,4],[1,3,4],[2,3,4] - \begin{center} \input{Fig/crvsfparadata2} \input{Fig/crvsfparadata1} \end{center} +と表現できる。 -戻り値を使うと,陰線のスタイル(線種,色)を変えることができる。戻り値と同じものがコンソールに「readoutdata from template3D1.txt : 」として表示されるので,これを見て操作対象を決めればよい。たとえば,上の左図で,線分ABの陰線はリストの4番目の crvsfh3d1 なので, +頂点のリストと,この面リストを組にして [[A,B,C,D],[[1,2,3],[1,2,4],[1,3,4],[2,3,4]]] としたものを「面データ」という。この面データを使って,多面体を描画するのが VertexEdgeFace() である。 -\begin{verbatim} - ret=ExeccmdC("1"); - Changestyle3d(ret_4,["da","Color=red"]); -\end{verbatim} +多面体の陰線処理は2通りある。ひとつは,多面体を線画と考えて,隠れる部分だけを処理する方法で,Skeletonparadata() を用いる。\hyperlink{concatobj}{Concatobj()} の例を参照のこと。 -とすると,赤の破線になる。 +もうひとつは,面と考えて,面に隠れる部分を点線で描いたり,非表示にしたりする方法で,Phparadata() を用いる。 \hyperlink{phparadata}{Phparadata()}の例を参照のこと。 + +\begin{description} -\hspace{20mm} \input{Fig/execcmdc1} + %-----------------Concatobj ----------------------------------------------- +\hypertarget{concatobj}{} +\item[関数] Concatobj(リスト,option) +\item[機能] いくつかのobjデータを結合する +\item[説明] 多面体の各面の頂点リストから面データ(頂点リストと面リスト)を作る。 -この他,\hyperlink{sfbdparadata}{Sfbdparadata()},\hyperlink{wireparadata}{Wireparadata()} も参照のこと。 +たとえば,\verb|Concatobj([[A,B,C],[A,B,D],[A,C,D],[B,C,D]]);| とすると,面データ [[A,B,C,D],[[1,2,3],[1,2,4],[1,3,4],[2,3,4]]] が返される。 \vspace{\baselineskip} -\hypertarget{embed}{} -\item[関数] Embed(name,PDリスト,式,変数リスト) -\item[機能] 2D図形の空間内平面へ埋め込む -\item[説明] 第2引数は2Dの図形のプロットデータのリスト,式と変数は平面を記述する式と変数。平面は原点$vo$と2つの基本ベクトル $\overrightarrow{vx},\overrightarrow{vy}$を用いて,$vo+x \cdot \overrightarrow{vx}+y \cdot \overrightarrow{vy}$ の形で表すことができる。変数(基本ベクトルの係数)は$x,y$ でなく,$s,t$ でもよい。式,変数リストともに文字列にする。また,基本ベクトルは直交していなくてもよいし,長さが異なってもよいが,縦横同じスケールの直交座標系にするのがわかりやすいだろう。 +【例】4点A,B,C,Dを幾何点として作り,これを頂点とする四面体を描く。 -\vspace{\baselineskip} -【例】正三角形と外接円を空間内の平面に埋め込む \begin{verbatim} - Xyzax3data("","x=[-5,4]","y=[-10,4]","z=[-5,5]",["a","O"]); - Spaceline("1",[[3,0,0],[3,6,0],[3,6,6],[3,0,6],[3,0,0]]); - Defvar("vo=[3,3,3]"); - Defvar("vx=[0,1,0]"); - Defvar("vy=[0,0,1]"); - Putpoint3d(["A",[3,3,3]]); - Circledata("1",[[0,0],[2,0]],["nodisp"]); - Listplot("1",[[0,2],[-sqrt(3),-1],[sqrt(3),-1],[0,2]],["nodisp"]); - Embed("1",["cr1","sg1"],"vo+x*vx+y*vy","[x,y]"); - Ptsize(3); - Drawpoint(A); +Putpoint3d("A",2*[0,0,sqrt(3)]); +Putpoint3d("B",2*[1,-1/sqrt(3),0]); +Putpoint3d("C",2*[0,sqrt(3)-1/sqrt(3),0]); +Putpoint3d("D",2*[-1,-1/sqrt(3),0]); +phd=Concatobj([[A,B,C],[A,B,D],[A,C,D],[B,C,D]]); +VertexEdgeFace("1",phd); +Skeletonparadata("1"); +pa=Parapt(A3d); +pb=Parapt(B3d); +pc=Parapt(C3d); +pd=Parapt(D3d); +Letter([pa,"ne","A",pb,"sw","B",pc,"se","C",pd,"e","D"]); \end{verbatim} - \begin{center} \input{Fig/embed01} \end{center} -ここで,Embed()で引き渡す vo,vx,vy については,Rでの変数定義が必要なので(\ketcindy では行わない)Defvar() によって定義をしている。 +\begin{center} \input{Fig/concatobj} \end{center} -原点,基本ベクトルを,点を作図して次のようにすることもできる。この場合は Defvar() は不要。 +<参考1> -\begin{verbatim} - Putpoint3d(["A",[3,3,3],"B",[0,1,0],"C",[0,0,1]]); - Embed("1",["cr1","sg1"],"A3d+x*B3d+y*C3d","[x,y]"); -\end{verbatim} -\begin{center} -\includegraphics[bb=0 0 477.02 383.02 , width=6cm]{Fig/embed03.pdf} -\end{center} +幾何点を作らないで四面体を描くのであれば, -この場合,点B,Cの座標がそのまま基本ベクトルとなっているが,原点Aに対して描画平面上にはB,Cがないので図がわかりにくい。図をわかりやすくするならば次のようにする。 \begin{verbatim} - Putpoint3d(["A",[3,3,3],"B",[3,4,3],"C",[3,3,4]]); - Embed("1",["cr1","sg1"],"A3d+x*(B3d-A3d)+y*(C3d-A3d)","[x,y]"); +a=2*[-1,-1/sqrt(3),0]; +b=2*[1,-1/sqrt(3),0]; +c=2*[0,sqrt(3)-1/sqrt(3),0]; +d=2*[0,0,sqrt(3)]; +phd=Concatobj([[a,b,c],[a,b,d],[a,c,d],[b,c,d]]); \end{verbatim} - また,平面を記述するのに,平面の原点と法線ベクトルを用いて Perpplane() を用いると,基本ベクトルが生成されるので、これを利用することができる。次のスクリプトでは,Skeletonparadata() を用いて陰線処理もしている。 -\begin{verbatim} - Xyzax3data("","x=[-5,5]","y=[-8,5]","z=[-5,5]"); - Putpoint3d(["O",[0,0,0],"P",[1,1,2]]); - Perpplane("E-F","P",P3d-O3d,"put"); - vec1=3*(E3d-P3d); - vec2=3*(F3d-P3d); - Putpoint3d(["A",P3d+vec1+vec2]); - Putpoint3d(["B",P3d+vec1-vec2]); - Putpoint3d(["C",P3d-vec1-vec2]); - Putpoint3d(["D",P3d-vec1+vec2]); - Spaceline("1",[A,B,C,D,A]); - Circledata("1",[[0,0],[2,0]],["nodisp"]); - Listplot("1",[[0,2],[-sqrt(3),-1],[sqrt(3),-1],[0,2]],["nodisp"]); - Embed("1",["cr1","sg1"],"P3d+x*(E3d-P3d)+y*(F3d-P3d)","[x,y]"); - Ptsize(3); - Drawpoint(P); - Skeletonparadata("1"); -\end{verbatim} - \begin{center} \input{Fig/embed02} \end{center} - -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} - - -\hypertarget{intersectcrvsf}{} -\item[関数] Intersectcrvsf(name,PD,式) -\item[機能] 曲線と曲面の交点の座標を求める -\item[説明] PDは曲線のプロットデータ。式は曲面の式。 - - 曲面は,Sfbdparadata()でデータを作成し,ExeccmdC()で表示しておく。交点の座標は,"intercrvsf"+name に代入される。コマンドの実行順序は次の例のようにする。 +としてもよい。 \vspace{\baselineskip} -【例】回転放物面と線分の交点の座標を表示する。 +<参考2> +四面体のような凸型多角形の場合は,CindyScriptの convexhull3d() 関数を用いて次のようにすることができる。面リストではなく頂点リストを与えるだけなので手間を省くことができる。 + \begin{verbatim} - Putpoint3d(["A",[0,-3,0],"B",[0,3,2]]); - Spaceline("1",[A,B]); - fd=[ - "z=4-(x^2+y^2)","x=R*cos(T)","y=R*sin(T)", - "R=[0,2]","T=[0,2*pi]","e" - ]; - Startsurf(); - Sfbdparadata("1",fd); - Intersectcrvsf("1","sl3d1",fd); - ExeccmdC("1",[""]); - println("Intersect="+intercrvsf1); - Drawpoint3d(intercrvsf1); +a=2*[0,0,sqrt(3)]; +b=2*[1,-1/sqrt(3),0]; +c=2*[0,sqrt(3)-1/sqrt(3),0]; +d=2*[-1,-1/sqrt(3),0]; +phd=convexhull3d([a,b,c,d]); \end{verbatim} -実行すると,コンソールに\\ - \verb|Intersect=[[0,1.57,1.52],[0,-1.91,0.36]] | -と表示され,画面には緑で交点が表示される。。 - -\vspace{\baselineskip} -\hypertarget{intersectsgpL}{} -\item[関数] IntersectsgpL(点名,線分,面,描画方法) -\item[機能] 空間の線分(直線)と平面の交点を求める。 -\item[説明] 引数の線分は線分の端点を "A-B" の形もしくは空間座標のリストで与える。 +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +%-------------------VertexEdgeFace ----------------------------------------------- +\hypertarget{vertexedgeface}{} +\item[関数] VertexEdgeFace(name,面データ,options) +\item[機能] 面データを用いて多面体を描く +\item[説明] 面データは,たとえば四面体ABCDの場合は,[[A,B,C,D],[[1,2,3],[1,2,4],[1,3,4],[2,3,4]]] である。 - 引数の面は,面内の3点を "C-D-E" の形もしくは空間座標のリストで与える。 +4点A,B,C,Dをとっておき,このリストを引数に与えると,四面体が描かれる。 - 戻り値は,[pt,flag1,flag2,val1,val2] - - pt:直線と平面の交点の座標。直線と平面が平行で交点が存在しない場合は空リスト[] - - flag1 : 交点が線分内にあれば true ,なければ false - - flag2 : 交点が面内にあれば true,なければ false - - val1,val2 : - - 描画方法は,"put" または "i" , "e" 。 - - put : 幾何点を作る +生成されるプロットデータは, - i : 線分内にあれば点を描く +phv3d:頂点のリスト - e : 平面で交われば点を描く - -\vspace{\baselineskip} -【例】座標のリストで与える記述例\\ - \verb|IntersectsgpL("P",[p1,p2],[p3,p4,p5],"draw");| - -\vspace{\baselineskip} -【例】立方体を平面で切った図を描く。 +phe3d:辺のリスト - いろいろな手順が考えられるが,ここでは次の手順で描く。 - - (1) 立方体の頂点をとる。1辺の長さをHnとする。 - - ここでは軸上の点はPutaxes3d()でとる。 - -(2) 切断面を決める点E,F,Gを辺上の自由点としてPutonseg3d()でとる。 +phf3d:面リスト -(3) E,F,Gを通る平面と,辺AC,DYとの交点をとり,M,Nとする。 +なお,それぞれ末尾にnameが付加される。 -(4) 全体を多面体として面データを作って描画する。 +\vspace{\baselineskip} +【例】4点A,B,C,Dを取り,正四面体ABCDを描く \begin{verbatim} - Hn=3; - Putaxes3d(Hn); - Putpoint3d("A",[Hn,Hn,0]); - Putpoint3d("B",[Hn,0,Hn]); - Putpoint3d("C",[Hn,Hn,Hn]); - Putpoint3d("D",[0,Hn,Hn]); - Putonseg3d("E",X,B); - Putonseg3d("F",Z,B); - Putonseg3d("G",Z,D); - IntersectsgpL("M","A-C","E-F-G","put"); - IntersectsgpL("N","D-Y","E-F-G","put"); - phd=Concatobj([[O,X,A,Y],[X,A,M,E],[A,Y,N,M],[Y,N,G,Z,O], - [O,Z,F,E,X],[Z,F,G],[E,M,N,G,F]]); + Putpoint3d("A",2*[-1,-1/sqrt(3),0]); + Putpoint3d("B",2*[1,-1/sqrt(3),0]); + Putpoint3d("C",2*[0,sqrt(3)-1/sqrt(3),0]); + Putpoint3d("D",2*[0,0,sqrt(3)]); + phd=[[A,B,C,D],[[1,2,3],[1,2,4],[1,3,4],[2,3,4]]]; VertexEdgeFace("1",phd); - Nohiddenbyfaces("1","phf3d1"); \end{verbatim} -Cinderellaの描画面はつぎのようになる。点E,F,Gをドラッグして,適当な位置の断面にする。ただし,M,Nは辺上にあることが条件である。 + \begin{center} \input{Fig/vertex01} \end{center} +面リストは,Congatobj() を使って作ることができる。陰線処理して描く場合も含め,\hyperlink{concatobj}{Concatobj()} の例を参照のこと。 \vspace{\baselineskip} -\includegraphics[bb=0 0 713.04 327.02 , width=12cm]{Fig/IntersectsgpL0.pdf} + %------------------Phparadata ----------------------------------------------- +\hypertarget{phparadata}{} +\item[関数] Phparadata(name,name2,options) +\item[機能] 多面体を陰線処理して描く +\item[説明] 多面体のプロットデータをVertexEdgeFace() で作る。このプロットデータに対し,隠れている面(辺)を陰線処理して表示する。第1引数は通常のname,第2引数のname2は,VertexEdgeFace() で与えたnameと同じものとする。 + + optionsは,全体の線種("dr,2"など)と,陰線の線種を"Hidden=線種" で指定できる。 初期設定では陰線は表示しない。 +\vspace{\baselineskip} +\begin{layer}{150}{0} +\putnotese{80}{0}{ \input{Fig/phparadata04}} +\end{layer} -できた図は下図左。これに,次のスクリプトを追加すれば,断面上方の立方体の各辺も点線で描かれる。(下図右) +【例】 四面体を描く。 \begin{verbatim} - Spaceline("1",[E,B,F],["do"]); - Spaceline("2",[B,C,M],["do"]); - Spaceline("3",[C,D,N],["do"]); - Spaceline("4",[D,G],["do"]); +Putpoint3d("A",2*[-1,-1/sqrt(3),0]); +Putpoint3d("B",2*[1,-1/sqrt(3),0]); +Putpoint3d("C",2*[0,sqrt(3)-1/sqrt(3),0]); +Putpoint3d("D",2*[0,0,sqrt(3)]); +phd=Concatobj([[A,B,C],[A,B,D],[A,C,D],[B,C,D]]); +VertexEdgeFace("1",phd); +Phparadata("1","1",["Hidden=do"]); \end{verbatim} -\begin{center} \input{Fig/IntersectsgpL1} \input{Fig/IntersectsgpL2} \end{center} - -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\hypertarget{invparapt}{} -\item[関数] Invparapt(座標,PD) -\item[機能] 描画面上の座標に対応する曲線上の点の座標を返す -\item[説明] Cinderellaの描画面上の座標を与えて,それに対応する曲線上の3次元座標を返す。 -\\ -空間内の曲線を作図すると,曲線の空間内のプロットデータとともに,描画面上に描くためのプロットデータも作られる。これを利用すると,描画面上の位置から曲線上の座標を求めることができる。 +なお,VertexEdgeFace() で四面体が描かれるが,Phparadata() により非表示になる。 +Figureボタンで描き出せば正しく出力されるので,Phparadata() を実行する前に画面上に表示して確認してからPhparadata() を実行するとよい。 \vspace{\baselineskip} -【例】螺旋と線分を描いたとき,描画面上での交点(空間内の交点ではない)に対応する螺旋上の点の座標を求め部分曲線を描く。 +【例】切頂二十面体を描く。 +小林・鈴木・三谷による多面体データ \verb|polyhedrons_obj| を用いて,s06の切頂二十面体(サッカーボール型)を描く。 \verb|polyhedrons_obj| は KeTCindyシステムの data ディレクトリにあるので,Setdirectory() でカレントディレクトリを作業ディレクトリと切替ながら出力する。 \begin{verbatim} - Spaceline("1",[[-1,-1,-1],[1,2,3]]); - Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["do"]); - tmp=Intersectcrvs("sl2d1","sc2d1"); - p1=Invparapt(tmp_1,"sc3d1"); - p2=Invparapt(tmp_2,"sc3d1"); - Partcrv3d("1",p1,p2,"sc3d1"); + Setdirectory( Dirhead+"/data/polyhedrons_obj"); + phd=Readobj("s06.obj",["size=3"]); + Setdirectory(Dirwork); + VertexEdgeFace("s06",phd); + Phparadata("1","s06"); \end{verbatim} - \begin{center}\scalebox{0.8}{ \input{Fig/invparapt}} \end{center} - -ここで,sl2d1,sc2d1 は線分と螺旋の描画面上での(平面の)プロットデータである。Intersectcrvs() で平面上の交点の座標(複数あるのでリストが返る)を求め,Invparapt() で対応する螺旋上の点の座標を求めて部分曲線を描いている。実際に交わる点での部分曲線ではないことに注意。 + VertexEdgeFace() の name は通常の "1" でもよい。その場合は,\verb|Phparadata("1","1");| とするが,わかりにくいので上のようにした。 + +実行すると,Cinderellaの描画面は次のように頂点だけが描かれる。 \vspace{\baselineskip} -\hypertarget{mkbezierptcrv3d}{} -\item[関数] Mkbezierptcrv3d(点リスト) -\item[機能] 制御点を自動的にとる空間ベジェ曲線 -\item[説明] リストで与えた点に対し,制御点を自動的に生成してベジェ曲線を描く。 +\begin{center} + \includegraphics[bb=0 0 726.04 365.02 , width=10cm]{Fig/phparadata01.pdf} +\end{center} + +\vspace{\baselineskip} +全体の線種と,陰線の線種を + +\verb|Phparadata("1","s06",["dr,2","Hidden=do"]);| - 制御点は,2つの点に対して,その点を端点とする線分上に2つ作られる。これを適宜移動して任意の曲線にすることができる。\hyperlink{bezier3d}{空間ベジェ曲線 Bezier3d()} を参照のこと。 +で指定したのが下図右である。 + + \begin{center} \input{Fig/phparadata02} \input{Fig/phparadata03} \end{center} + +【注意】 + + polyhedrons obj のデータを使って,続けて異なる多面体を描きたい場合は注意が必要である。Readobj()だけを変更して別のデータを読めばよさそうであるが,前のデータが残っていてうまくいかない。VertexEdgeFace() のname を(したがって,Phparadata()の第2引数も)書き換えるか,作業フォルダ(fig) の中身を削除してから実行する。たとえば,上のコードで切頂二十面体を描いた後,正八面体(r02)を描こうとするならば, +\begin{verbatim} + Setdirectory( Dirhead+"/data/polyhedrons_obj"); + phd=Readobj("r02.obj",["size=3"]); + Setdirectory(Dirwork); + VertexEdgeFace("2",phd); + Phparadata("1","2"); +\end{verbatim} + のようにする。 -\vspace{\baselineskip} -【例】\verb|Mkbezierptcrv3d(["A","B","C","D"]);|\\ - 線分AB上に2点a1p,a2p,線分BC上に2点a2p,a2q,線分CD上に2点a3p,a3qができる。 - \begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +%------------------- Nohiddenbyfaces ----------------------------------------------- \hypertarget{nohiddenbyfaces}{} \item[関数] Nohiddenbyfaces(name,PD1,PD2,option1,option2) \item[機能] 面に対し曲線を陰線処理する \item[説明] PD2で与えられた面に対し,曲線PD1の面に隠れている部分を陰線処理する。 -引数PD1を省略するとすべての曲線が対象となる。陰線処理された線は初期設定では点線で表される。この線種はoption2で変更できる。たとえば,["da"] とすると破線になる。option1は曲線全体のoptionであるので,option2 だけを指定する場合は,option1 として空リスト[ ] が必要である。 +引数PD1を省略するとすべての曲線が対象となる。陰線処理された線は初期設定では点線で表される。この線種はoption2で変更できる。たとえば,["da"] とすると破線になる。["nodsip"] とすると,陰線は表示されない。option1は曲線全体のoptionであるので,option2 だけを指定する場合は,option1 として空リスト[ ] が必要である。 option2では,"Eps=" で,陰線処理時の許容限界を設定できる。陰線処理がうまくいかないときは,この値を \verb|Eps=10^(-4)| のように変えてみるとよい。初期設定は \verb|Eps=10^(-2)|。 \vspace{\baselineskip} @@ -6404,343 +6501,665 @@ Nohiddenbyfaces("1","phf3d1"); とすれば,座標軸だけが陰線処理されて破線で描かれる。 %\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +\end{description} + +%================== 3D 曲面 =============== +\subsubsection{曲面} + +曲面の描画には,ワイヤーフレームモデルとサーフェスモデルがある。ワイヤーフレームモデルは,曲面を編目で表すものであり,サーフェスモデルは編目のない面として,その輪郭線を描くものである。 + + \begin{center} \input{Fig/surfacemodel} \end{center} + +%\hspace{20mm}ワイヤーフレームモデル \hspace{10mm}サーフェスモデル + +KeTCindyでは,それぞれ次の関数を用いて描画する。 +\begin{tabbing} +12345678901234567890123456789012345678\=\kill +陰線処理をしないワイヤーフレームモデル \>Sf3data(name,form,options)\\ +サーフェスモデル \>Sfbdparadata(name,form,options)\\ +陰線処理をしたワイヤーフレームモデル \>Wireparadata(name,PD,form,n1,n2,options) +\end{tabbing} +ただし,陰線処理をするためには面のデータが必要なので,Sfbdparadata() で描画した後,Wireparadata()で陰線処理して描画する。 + +また,サーフェスモデルの描画では,陰線処理に時間がかかるため,C言語の使用を前提としている。したがって,C言語を用いて描画を行う ExeccmdC() を併用する。 + +引数の form は,方程式 と,変数の定義域を文字列のリストにしたものである。方程式のパターンは次の3通りがある。 + +(1) $z=f(x,y)$ + + \hspace{5mm} 【例】式:$z=x^2-y^2$ + + \hspace{15mm} 定義域:$x=(-2,2) , y=(-2,2)$ + +(2) $z=f(x,y),x=g(r,t),y=h(r,t)$ + + \hspace{5mm} 【例】式:$z=4-(x^2+y^2) , x=r\cos t , y=r\sin t$ + +\hspace{15mm} 定義域:$r=(0,2) , t=(0,2\pi)$ + +(3) $x=f(u,v),y=g(u,v),z=h(u,v),$ + + \hspace{5mm} 【例】式:$x=2\sin u \cos v , y=2\sin u \sin v , z=2\cos u $ + +\hspace{15mm} 定義域:$u=(0,\pi) , v=(0,2\pi)$ + +ここで,(2)と(3)は媒介変数型で,$x,y,z$ それぞれの式と,媒介変数2つの定義域からなっている。そのままでは区別がつかないので,引数として与えるときは,(3) の型には,識別文字として "p" を先頭に付加する。 + +また,定義域については,開区間でとる場合と閉区間でとる場合がある。その区別を境界指定として"ewsn"で表す(ともに閉区間)。"ewsn" の意味は次のように考える。 + +変数が $u,v$ のとき,$u,v$平面において,$a \leq u \leq b,c \leq v \leq d$ の矩形を考え,境界値を東西南北(ewsn)で示す。それぞれの文字が書かれたときは境界値を含む。 + + \begin{center} \input{Fig/ewsn} \end{center} + +この境界指定を最後に付加するが,省略することもでき,省略した場合は初期値の "ewsn" (閉区間)とする。ともに開区間とする場合は,"" を付加する。ただし,陰線処理をしない Sf3data() では,境界にも線を引くので,この指定は省略してよい。 + +具体的な例を示そう。 + +次は,円錐の form である。(formは form data を短縮した fd がよく使われる) + \vspace{\baselineskip} -\hypertarget{parapt}{} -\item[関数] Parapt(座標) -\item[機能] 点の投影面での座標 -\item[説明] 引数の空間座標に対応するCinderellaの描画面の座標を返す。 +\verb|fd=["p","x=r*cos(t)","y=r*sin(t)","z=2*(2-r)","r=[1,2]","t=[0,2*pi]","ew"]| \vspace{\baselineskip} -【例】\verb|Parapt([2,1,5]);| により,点(2,1,5) が表示されている描画面の座標,たとえば [-0.52,3.27] が返される。 -%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +"ew" は $1 \leq r \leq 2$ であることを示す。したがって,円錐台の上面と底面が表示される。 + +これを "e" とすると $1 < r \leq 2$ となり,上面が表示されない。 + +また,これを "w" とすると $1 \leq r < 2$ となり,底面が表示されない。 + +さらに,"ewn" あるいは "ews" としたり,指定を略して初期値の "ewsn" とすると,$t=(0,2\pi)$ の左右いずれかの値が含まれることになり,不要な境界線が現れる。 \vspace{\baselineskip} -\hypertarget{perpplane}{} -\item[関数] Perpplane(点名,点,ベクトル,option) -\item[機能] 点を通り線分に垂直な平面上に基準点を2つとる -\item[説明] 引数の点名は,作成する2点で "A-B" の形 +\hspace{12mm}"ew" \hspace{25mm}"e" \hspace{25mm}"w" \hspace{25mm}"ewn" -第2引数は通る点の名称または座標 +\input{Fig/frustumew} \input{Fig/frustume} \input{Fig/frustumw} \input{Fig/frustumewn} + +\begin{description} + +%------------------ Sf3data ----------------------------------------------- +\vspace{\baselineskip} +\hypertarget{sf3data}{} +\item[関数] Sf3data(name,リスト,options) +\item[機能] 陰線処理なしの曲面をワイヤーフレームモデルで描く +\item[説明] optionsは,メッシュの密度と解像度(各変数に対応する分割数)。 + +メッシュ密度は,縦横で "Wire=[a,b]" で指定。初期値はa,bとも20。 + +解像度は,"Num=[a,b]" で指定。初期値はa,bとも25。 + +\begin{layer}{150}{0} +\putnotese{88}{10}{ \input{Fig/saddle1}} +\end{layer} + +\vspace{\baselineskip} +【例】 $z=f(x,y)$ 型 + + $z=x^2-y^2$を定義域$x=[-2,2],y=[-2,2]$ で描画する。 -第3引数は法線ベクトル +\verb| fd=["z=x^2-y^2","x=[-2,2]","y=[-2,2]"];|\\ +\verb| Sf3data("1",fd)|; + +メッシュの数を縦横とも10,解像度をx,yとも10にすると + + メッシュ密度,解像度とも下げるので粗い描画となる。 + +\verb|Sf3data("1",fd,["Num=[10,10]","Wire=[10,10]"]);| -optionは "put" で,2つの幾何点を作図する。optionがない場合は幾何点は作らず,無名の点のみを表示する。put以外の文字列を書いたときは無効な命令とし,何も作成されない。 +\vspace{\baselineskip} +【例】$z=f(x,y),x=g(r,t),y=h(r,t)$型 + +次図左 -記述例を示すと +\verb|fd=["z=4-(x^2+y^2)","x=r*cos(t)","y=r*sin(t)","r=[0,2]","t=[0,2*pi]"];| + +\verb|Sf3data("1",fd);| + +次図右 + +\verb|fd=["z=sin(sqrt(abs(x^2+y^2)))","x=r*cos(t)","y=r*sin(t)",| + +\verb| "r=[0,3]","t=[0,2*pi]"];| + +\verb|Sf3data("1",fd);| + + \begin{center} \input{Fig/parabola} \input{Fig/sf3ddata3} \end{center} + +(3) $x=f(u,v),y=g(u,v),z=h(u,v),$ 型 + + この場合,(2)と区別するために,"p" を先頭につけておく。 - \verb|Perpplane("A-B","P",[1,1,1],"put");| + \vspace{\baselineskip} + 【例】球面 + + \verb|fd=["p","x=2*sin(u)*cos(v)","y=2*sin(u)*sin(v)","z=2*cos(u)",| -点Pを通り,法線ベクトル(1,1,1)に垂直な平面上に点A,Bをとる。 +\verb|"u=[0,pi]","v=[0,2*pi]",""];| +\verb|Sf3data("1",fd);| - \verb|Perpplane("A-B","P",P3d-O3d);| +\begin{center} \input{Fig/sf3ddata4} \end{center} + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +%------------------ Sfbdparadata ----------------------------------------------- +\hypertarget{sfbdparadata}{} +\item[関数] Sfbdparadata(name,式,options) +\item[機能] 陰線処理した曲面のデータを作る +\item[説明] この関数はデータを作るだけなので,表示するには ExeccmdC() を併用する。 + +optionsは,"Wait=n","r","m",および線種。Wait の初期値は30。 + + "r","m"に関しては, - 点Pを通り,線分OPに垂直な平面上に点A,Bをとる。 - これらにおいて,PAとPBは垂直で,PA=PB=1 となる。 +\hspace{5mm} オプションなしまたは,”” のとき +\hspace{10mm} i) データファイルがなければ,新しく作る + +\hspace{10mm} ii) データファイルが既にあればそれを読み込む + +\hspace{5mm}"m" のとき,強制的にデータファイルを作り直す。 + +\hspace{5mm}"r" のとき,すでにあるデータファイルを読み込む。 + +この処理は時間がかかるため,この関数を実行した状態で画面上のスライダやその他の点を動かそうとすると反応が悪くなる。そこで,Isangle() または Isptselected() を用いて,スライダの点を選択しているときはワイヤフレームモデルを描画するようにするとよい。 + +なお,C言語の環境がない場合は,ExeccmdC() が使えないので,SfbdparadataR(name,式,optons1,optons2) を使う。options2には陰線の表示方法について "nodisp" または線種 を指定する。 初期設定は"nodisp" 。options2のみ指定するときは,options1に [""] (空文字)を書いておく。 + +作図例は 次の ExeccmdC を参照のこと。 + +%------------------- ExeccmdC ----------------------------------------------- \vspace{\baselineskip} -【例】ベクトル $\vec{p}=(1,1,1)$ に垂直で点$(1,1,1)$を通る平面ABCDを描く。 +\hypertarget{execcmdc}{} +\item[関数] ExeccmdC(name,options1,options2) +\item[機能] 曲面を表示する。戻り値は,対象にしたプロットデータのリスト。 +\item[説明] データが作成された曲面を表示する。 - 点A,B,C,Dは作図ツールで適当に取っておく。正確な位置はスクリプトで決める。 +options1 には"r","m", "Wait=n" と輪郭線の線種が指定できる。 + +options2 には 軸の陰線について "nodisp" または線種が指定できる。 初期設定は "do"。 -\begin{layer}{120}{0} -\putnotese{80}{20}{ \input{Fig/perpplane}} +options2だけを指定したい場合は,options1 を空リスト [ ] にする。 + +\vspace{\baselineskip} + +【例】サドル面 + +\begin{layer}{150}{0} +\putnotese{85}{0}{ \input{Fig/sfbdpara01}} +\putnotese{85}{45}{ \input{Fig/sfbdpara02}} \end{layer} +陰線を消去して表示 \begin{verbatim} - Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,4]"); - Putpoint3d(["O",[0,0,0]]); - Putpoint3d(["P",[1,1,1]]); - Perpplane("E-F","P",P3d-O3d,"put"); - vec1=2*(E3d-P3d); - vec2=2*(F3d-P3d); - Putpoint3d(["A",P3d+vec1+vec2]); - Putpoint3d(["B",P3d+vec1-vec2]); - Putpoint3d(["C",P3d-vec1-vec2]); - Putpoint3d(["D",P3d-vec1+vec2]); - Spaceline("1",[A,B,C,D,A]); - Arrowdata([O,P],["dr,2"]); - Letter([P,"w","P",A,"ne","A",B,"e","B",C,"ws","C",D,"nw","D",]); - Skeletonparadata("1"); + fd=["z=x^2-y^2","x=[-2,2]","y=[-2,2]"]; + if(Isangle(), + Sf3data("1",fd); + , + Startsurf(); + Sfbdparadata("1",fd); + ExeccmdC("1",[],["nodisp"]); + ); \end{verbatim} +全体を実線で太めにして,陰線を点線で表示 +\verb|ExeccmdC()| を変更する。 + +\verb| ExeccmdC("1",["dr,2"]);| + +\vspace{10mm} +【例】放物面 : 式を変更する。 +\begin{verbatim} + fd=["z=4-(x^2+y^2)","x=R*cos(T)","y=R*sin(T)","R=[0,2]","T=[0,2*pi]","e"]; +\end{verbatim} + 陰線を消去(下図左):\verb|ExeccmdC("1",[],["nodisp"]);| + + 陰線を破線で表示(下図右):\verb|ExeccmdC("1",[],["da"]);| + \begin{center} \input{Fig/sfbdpara03} \input{Fig/sfbdpara04} \end{center} + +【例】曲面を2つ表示するときは,Sfbdparadata() の name は "1" と "2" にするが,まとめて \verb|ExeccmdC("1")| で表示できる。 + +\begin{verbatim} +fd=[ + "p", + "x=r*cos(t)","y=r*sin(t)","z=2*(2-r)", + "r=[1,2]","t=[0,2*pi]","ew" +]; +fd2=[ + "p", + "x=r*cos(t)-3","y=r*sin(t)+3","z=2*(2-r)", + "r=[0,2]","t=[0,2*pi]","ew" +]; +if(!ptselected(), + Startsurf(); + Sfbdparadata("1",fd); + Sfbdparadata("2",fd2); + ExeccmdC("1"); +); +\end{verbatim} + \begin{center} \input{Fig/sfbdpara05} \end{center} + \begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\vspace{\baselineskip} -\hypertarget{perppt}{} -\item[関数] Perppt(点名,点,点リスト,option) -\item[機能] 平面に下ろした垂線の足を求める -\item[説明] 第2引数の点から,第3引数の点リストで決まる平面に下した垂線の足を,第1引数の名前の点とする。 -オプションは次の通り。 初期設定は "draw" -draw:点を打つ。幾何点は作らない +%-------------------Wireparadata ----------------------------------------------- +\hypertarget{wireparadata}{} +\item[関数] Wireparadata(name,PD,式,整数,整数,optons) +\item[機能] Sfbdparadataで作成した曲面について,陰線処理したワイヤーフレームモデルを作る。 +\item[説明] PDは,第3引数の式で描いたワイヤフレームモデルのプロットデータ名。第4,第5引数は分割線の数。 -put :幾何点を作る +options には "r","m","Wait=n" が指定できる。 + +Sfbdparadata() とペアで使い,そのあとに ExeccmdC で描画する。 -none:計算だけ行い,点は作図しない。 +C言語の環境がない場合は,ExeccmdC() が使えないので,WireparadataR(name,PD,式,整数,整数,optons1,optons2) を使う。options2には陰線の表示方法について "nodisp" または線種 を指定する。 初期設定は"nodisp" 。options2のみ指定するときは,options1に [""] (空文字)を書いておく。 -\vspace{\baselineskip} -【例】原点から点ABCを通る平面に下した垂線の足Hの座標を求める。 +\vspace{\baselineskip} +【例】 - \verb|Perppt("H","O","A-B-C","none");| 表示はされない。 - - \verb|Perppt("H","O","A-B-C");| Hの位置に緑色の点が表示される。 - - \verb|Perppt("H","O","A-B-C","put");| 幾何点Hが作図される。 - - いずれの場合も,Hの座標は変数H3d に代入される - -\vspace{\baselineskip} -作図例 +サドル面 + +\begin{layer}{150}{0} +\putnotese{85}{5}{ \input{Fig/wirepara1}} +\end{layer} \begin{verbatim} - Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,4]"); - Putpoint3d("O",[0,0,0]); - Putpoint3d("A",[3,0,0]); - Putpoint3d("B",[0,3,0]); - Putpoint3d("C",[0,0,3]); - Perppt("H","O","A-B-C","put"); - Spaceline("1",[A,B,C,A]); - Spaceline("2",[O,H]); - Letter([A,"nw","A",B,"ne","B",C,"ne","C",O,"nw","O",H,"ne","H"]); + fd=["z=x^2-y^2","x=[-2,2]","y=[-2,2]"]; + if(Isangle(), + Sf3data("1",fd); + , + Startsurf(); + Sfbdparadata("1",fd); + Wireparadata("1","sfbd3d1",fd,4,5); + ExeccmdC("1"); + ); \end{verbatim} -\vspace{\baselineskip} -\begin{center} \input{Fig/perppt} \end{center} +回転放物面:次を変更 -\vspace{\baselineskip} -\hypertarget{partcrv3d}{} -\item[関数] Partcrv3d(name,始点,終点,PD) -\item[機能] 部分曲線のプロットデータを作成する -\item[説明] 曲線PDにおいて,始点から終点までのプロットデータを作成する。 +\begin{layer}{150}{0} +\putnotese{85}{0}{ \input{Fig/wirepara2}} +\end{layer} +\begin{verbatim} + fd=["z=4-(x^2+y^2)","x=r*cos(t)", + "y=r*sin(t)","r=[0,2]","t=[0,2*pi]","e"]; + Wireparadata("1","sfbd3d1",fd,5,7); +\end{verbatim} +\vspace{10mm} -始点と終点は,プロットデータの番号もしくは曲線上にとった点の識別名で示す。 +球面 -\vspace{\baselineskip} -【例】螺旋を描き一部分を太くする。PutonCurve3d() で螺旋上に点C,Dができるので,ドラッグして適当な位置に移動する。 +\begin{layer}{150}{0} +\putnotese{80}{0}{ \input{Fig/wirepara3}} +\end{layer} \begin{verbatim} - Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,4]"); - Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["Num=100"]); - PutonCurve3d("C","sc3d1"); - PutonCurve3d("D","sc3d1"); - Partcrv3d("1",C,D,"sc3d1",["dr,3"]); - Letter([C,"n2","C",D,"n2","D"]); + fd=["p","x=2*sin(u)*cos(v)", + "y=2*sin(u)*sin(v)", + "z=2*cos(u)","u=[0,pi]", + "v=[0,2*pi]",""]; + Sfbdparadata("1",fd); + Wireparadata("1","sfbd3d1",fd,12,12); \end{verbatim} - ここで,\verb|"sc3d1"| は,螺旋,\verb|"part3d1"| は,部分曲線のプロットデータである。 - -\begin{center} \input{Fig/partcrv3d1} \end{center} -\vspace{\baselineskip} -【例】稲妻状の螺旋を点線で描き,その一部を実線にする。位置はプロットデータの番号で示す。小数にすると曲線を分割している線分の途中の位置になる。 +\vspace{8mm} + +【例】球面で座標軸を陰線処理し,面の陰線は非表示で表す。 + +\begin{layer}{150}{0} +\putnotese{70}{5}{ \input{Fig/wirepara4}} +\end{layer} + \begin{verbatim} -Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["Num=10","do"]); -Partcrv3d("1",3.3,8.5,"sc3d1"); + fd=["p","x=2*sin(u)*cos(v)", + "y=2*sin(u)*sin(v)", + "z=2*cos(u)", + "u=[0,pi]","v=[0,2*pi]",""]; + if(Isangle(), + Sf3data("1",fd); + , + Startsurf(); + Sfbdparadata("1",fd); + Wireparadata("1","sfbd3d1",fd,12,12); + Crvsfparadata("1","ax3d","sfbd3d1",fd); + ret=ExeccmdC("1"); + forall(1..length(ret), + if(indexof(ret_#,"wireh")>0, + Changestyle3d([ret_#],["nodisp"]); + ); + ); + ); \end{verbatim} - \begin{center} \input{Fig/partcrv3d2} \end{center} +【例】トーラスを描く -\hypertarget{phparadata}{} -\item[関数] Phparadata(name,name2,options) -\item[機能] 多面体を陰線処理して描く -\item[説明] 多面体を陰線処理して描く。多面体は面データ(頂点リストと面リスト)を与えて,VertexEdgeFace() でプロットデータを作る。このプロットデータに対し,隠れている面(辺)を非表示にして表示する。第1引数は通常のname,第2引数のname2は,VertexEdgeFace() で与えたnameと同じものとする。 +式を次のように変え,軸は非表示にして,\verb|ExeccmdC("1",[],["nodisp"])| にする。 - optionsは,全体の線種("dr,2"など)と,陰線の線種を"Hidden=線種" で指定できる。 初期設定では陰線は表示しない。 - -\vspace{\baselineskip} -【例】小林・鈴木・三谷による多面体データ \verb|polyhedrons_obj| から,s06の切頂二十面体(サッカーボール型)を描く。 \verb|polyhedrons_obj| は KeTCindyシステムの data ディレクトリにあるので,Setdirectory() でカレントディレクトリを作業ディレクトリと切替ながら出力する。 \begin{verbatim} - Setdirectory( Dirhead+"/data/polyhedrons_obj"); - phd=Readobj("s06.obj",["size=3"]); - Setdirectory(Dirwork); - VertexEdgeFace("s06",phd); - Phparadata("1","s06"); + fd=["p","x=(2+cos(u))*cos(v)","y=(2+cos(u))*sin(v)","z=sin(u)", + "u=[0,2*pi]","v=[0,2*pi]","s"]; \end{verbatim} - VertexEdgeFace() の name は通常の "1" でもよい。その場合は,\verb|Phparadata("1","1");| とするが,わかりにくいので上のようにした。 - -実行すると,Cinderellaの描画面は次のように頂点だけが描かれる。 - -\vspace{\baselineskip} -\begin{center} - \includegraphics[bb=0 0 726.04 365.02 , width=10cm]{Fig/phparadata01.pdf} -\end{center} +%\vspace{\baselineskip} + \begin{center} \input{Fig/wirepara5} \end{center} -\vspace{\baselineskip} -全体の線種と,陰線の線種を - -\verb|Phparadata("1","s06",["dr,2","Hidden=do"]);| +%------------------- Crvsfparadata ----------------------------------------------- -で指定したのが下図右である。 +\hypertarget{crvsfparadata}{} +\item[関数] Crvsfparadata(name,PD1,PD2,式) +\item[機能] 曲面による曲線の陰線処理を行う。 +\item[説明] 曲線PD1と曲面PD2について,PD1はPD2による陰線処理を行う。 - \begin{center} \input{Fig/phparadata02} \input{Fig/phparadata03} \end{center} +Crvsfparadata() のあとに ExeccmdC() でまとめて描画する。 -【注意】 +C言語が使えない場合は,CrvsfparadataR(name,PD1,PD2,式,options1,options2) を使う。 +options1 は分割数と誤差限界, options2 は陰線の線種。 + +【例】回転放物面と座標軸,線分を陰線処理したデータを作って表示する。線分の端点A,Bはあらかじめ作図しておく。 - polyhedrons obj のデータを使って,続けて異なる多面体を描きたい場合は注意が必要である。Readobj()だけを変更して別のデータを読めばよさそうであるが,VertexEdgeFace() のname も(したがって,Phparadata()の第2引数も)書き換えないと,前のデータが残っていてうまくいかない。たとえば,上のコードで切頂二十面体を描いた後,正八面体(r02)を描こうとするならば, +ExeccmdC()の 初期設定では陰線は点線で表示される。(下図左) \begin{verbatim} - Setdirectory( Dirhead+"/data/polyhedrons_obj"); - phd=Readobj("r02.obj",["size=3"]); - Setdirectory(Dirwork); - VertexEdgeFace("2",phd); - Phparadata("1","2"); + Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]"); + Putpoint3d(["A",[0,-3,0],"B",[0,3,3]]); + Spaceline([A,B]); + fd=["z=4-(x^2+y^2)","x=R*cos(T)","y=R*sin(T)","R=[0,2]","T=[0,2*pi]","e"]; + Startsurf(); + Sfbdparadata("1",fd); + Crvsfparadata("1","AB3d","sfbd3d1",fd); + Crvsfparadata("2","ax3d","sfbd3d1",fd); + ExeccmdC("1"); +\end{verbatim} +ExeccmdC()の options2を ["nodisp"] にすると,陰線は非表示になる。(下図右) +\begin{verbatim} + ExeccmdC("1",[],["nodisp"]); \end{verbatim} - のようにする。 - -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + \begin{center} \input{Fig/crvsfparadata2} \input{Fig/crvsfparadata1} \end{center} -\hypertarget{pointdata3d}{} -\item[関数] Pointdata3d(名前,点リスト,options) -\item[機能] 点の3Dデータと2Dデータを作成し,画面と\TeX に出力する。 -\item[説明] optionsは\hyperlink{pointdata}{Pointdata()}と同様。 -\vspace{\baselineskip} +戻り値を使うと,Changestyle3d() を使って陰線のスタイル(線種,色)を変えることができる。戻り値の内容は,コンソールに「readoutdata from template3D1.txt : 」として表示されるので,これをテキストエディタで開き,操作対象を決めればよい。たとえば,上の左図で,線分ABの陰線はリストの4番目の crvsfh3d1 なので, -【例】 \begin{verbatim} - Pointdata3d("1",[[1,1,1],[0,1,0]],["Size=2","Color=red"]); + ret=ExeccmdC("1"); + Changestyle3d(ret_4,["da","Color=red"]); \end{verbatim} -\vspace{\baselineskip} -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +とすると,赤の破線にすることができる。 -\hypertarget{projcoordpara}{} -\item[関数] Projcoordpara(座標) -\item[機能] 投影座標を求める -\item[説明] 空間座標を平面に投影した座標を求める。 +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -戻り値の第1,第2要素はCinderellaの描画面のx,y座標。第3要素はxy平面に垂直なzの座標で.投影面からの(符号付)距離を表す。 +\end{description} +\newpage +%================== 3D プロットデータの操作 =============== +\subsection{プロットデータの操作} +\begin{description} +%------------------- Datalist2d ----------------------------------------------- \vspace{\baselineskip} -【例】\verb|Projcoordpara([3,1,2]);| - - 戻り値は [-0.65,1.7,3.27] のようになる。(視点によって値は異なる) +\hypertarget{datalist}{} +\item[関数] Datalist2d() +\item[機能] 画面上のプロットデータのリストを取得する +\item[説明] 画面に描かれているすべてのプロットデータのリストを返す。 +空間図形は,Cinderellaの画面上に射影し表示する。そのため,KeTCindy3Dは,空間におけるプロットデータと,画面上に表示するプロットデータの2つを作っている。Datalist2d()では,画面上に表示するプロットデータのリストを返す。 \vspace{\baselineskip} -\hypertarget{putaxes3d}{} -\item[関数] Putaxes3d([x,y,z]) -\item[機能] 軸上に幾何点を作る。 -\item[説明] 引数のリスト [x,y,z] に対し,点X(x,0,0) ,Y(0,y,0) , Z(0,0,z) および 原点Oを主画面上にとり,副画面上に対応する点Xz,Yz,Zz,Oz を作る。すでに同じ名称の点がある場合は,指定された位置に移動する。 +【例】 +\begin{verbatim} + Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]"); + Putpoint3d(["A",[0,-3,0],"B",[0,3,3]]); + Spaceline("1",[A,B]); + println("PD="+Datalist2d()); +\end{verbatim} +とすると,コンソールに PD=[ax2d,AB2d] と表示される。ax2dは座標軸のプロットデータ ax3d に,AB2d は線分ABのプロットデータ AB3d に対応している。 +%------------------- Datalist3d ----------------------------------------------- +\vspace{\baselineskip} +\hypertarget{datalist}{} +\item[関数] Datalist3d() +\item[機能] 空間のプロットデータのリストを取得する +\item[説明] 空間に描かれているすべてのプロットデータのリストを返す -引数は,実数にすることもでき,Putaxes3d(a) は,Putaxes3d([a,a,a]) と同じになる。 - \vspace{\baselineskip} -【例】Putaxes3d(5); 原点と,$x(5,0,0),y(0,5,0),z(0,0,5)$ を作る。 +【例】 +\begin{verbatim} + Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]"); + Putpoint3d(["A",[0,-3,0],"B",[0,3,3]]); + Spaceline("1",[A,B]); + println("PD="+Datalist3d()); +\end{verbatim} +とすると,コンソールに PD=[ax3d,AB3d] と表示される。 - Putaxes3d([1,2,3]); 原点と,$x(1,0,0),y(0,2,0),z(0,0,3)$ を作る。 \begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\vspace{\baselineskip} -\hypertarget{putonCurve3d}{} -\item[関数] PutonCurve3d(点名,PD) -\item[機能] 空間曲線上に点をとる -\item[説明] プロットデータPDの曲線上に,点名の点をとる。 +%------------------- Changestyle3d ----------------------------------------------- +\hypertarget{changestyle3d}{} +\item[関数] Changestyle3d(リスト,リスト) +\item[機能] 3Dプロットデータの属性を変更 +\item[説明] 第1引数のプロットデータの属性を,第2引数に変更する。 -とった点は固定点ではなく,曲線上にインシデントとなる。したがって,ドラッグして曲線上を動かすことができる。例は \hyperlink{partcrv3d}{Partcrv3d()} を参照のこと。 +たとえば,補助線など,画面には描いてもTeXに書き出さない線を描画するときは,optionに["notex"] をつけるが,これをあとから付加したい場合に利用する。プロットデータはリストにできるので,複数のプロットデータの属性をまとめて変更することができて便利である。 \vspace{\baselineskip} -\hypertarget{putonseg3d}{} -\item[関数] Putonseg3d(点名,点1,点2) -\item[機能] 線分上に点を作る -\item[説明] 点1と点2の中点に,指定された名前の点を取る。点1と点2が線分として結ばれていなくてもよい。とった点は線分にインシデントとなる(線分が描かれていなくても)。点1と点2はリストにすることもできる。指定した点がすでに存在する場合は動かさない。 +【例】4つの点で四面体の辺を描き,まとめて notex にする。点A,B,C,Dはとってあるものとする。 +\begin{verbatim} + Spaceline("1",[A,B]); + Spaceline("2",[A,C]); + Spaceline("3",[B,C]); + Spaceline("4",[A,D]); + Spaceline("5",[B,D]); + Spaceline("6",[C,D]); + edges=apply(1..6,"sl3d"+text(#)); + Changestyle3d(edges,["notex"]); +\end{verbatim} -点1,点2は幾何点の名称または座標で指定する。 +%------------------- Intersectcrvsf ----------------------------------------------- +\hypertarget{intersectcrvsf}{} +\item[関数] Intersectcrvsf(name,PD,式) +\item[機能] 曲線と曲面の交点の座標を求める +\item[説明] PDは曲線のプロットデータ。式は曲面の式。 -\vspace{\baselineskip} -【例】A(1,-1,0)とB(0,2,2) の中点に点Cをとる。つぎのいずれでもよい。 + 曲面は,Sfbdparadata()でデータを作成し,ExeccmdC()で表示しておく。交点の座標は,"intercrvsf"+name に代入される。コマンドの実行順序は次の例のようにする。 + +\begin{layer}{150}{0} +\putnotese{80}{40}{ \includegraphics[bb=0 0 149.51 121.51 , height=4cm]{Fig/Intersectcurvsf.pdf}} +\end{layer} - \verb|Putonseg3d("C",A,B);| +\vspace{\baselineskip} +【例】回転放物面と線分の交点の座標を表示する。 +\begin{verbatim} + Putpoint3d(["A",[0,-3,0],"B",[0,3,2]]); + Spaceline("1",[A,B]); + fd=[ + "z=4-(x^2+y^2)","x=R*cos(T)","y=R*sin(T)", + "R=[0,2]","T=[0,2*pi]","e" + ]; + Startsurf(); + Sfbdparadata("1",fd); + Intersectcrvsf("1","sl3d1",fd); + ExeccmdC("1",[""]); + println("Intersect="+intercrvsf1); + Drawpoint3d(intercrvsf1); +\end{verbatim} +実行すると,コンソールに - \verb|Putonseg3d("C",[A,B]);| +\verb| Intersect=[[0,1.57,1.52],[0,-1.91,0.36]] | - \verb|Putonseg3d("C",[[1,-1,0],[0,2,2]]);| +のように表示され,画面には緑で交点が表示される。 +%------------------- IntersectsgpL ----------------------------------------------- \vspace{\baselineskip} +\hypertarget{intersectsgpL}{} +\item[関数] IntersectsgpL(点名,線分,面,描画方法) +\item[機能] 空間の線分(直線)と平面の交点を求める。 +\item[説明] 引数の線分は線分の端点を "A-B" の形もしくは空間座標のリストで与える。 -\hypertarget{putpoint3d}{} -\item[関数] Putpoint3d(リスト,option) -\item[機能] 空間に幾何点を作図する -\item[説明] 点の名称と座標を与えて点を作図する。複数の点を一度に作図できる。 +引数の面は,面内の3点を "C-D-E" の形もしくは空間座標のリストで与える。 -optionは,"fix"( 初期設定) または "free"。リスト ["free"] にしてもよい。 - -"fix" では,固定点(ドラッグで移動できない点)とする。同じ名称の点がすでに存在する場合は,指定した位置に移動して固定点とする。 - -"free" では,自由点(ドラッグで移動できる)とする。同じ名称の点がすでに存在する場合はなにもしない。 +戻り値は,[pt,flag1,flag2,val1,val2] + +pt:直線と平面の交点の座標。直線と平面が平行で交点が存在しない場合は空リスト[] + +flag1 : 交点が線分内にあれば true ,なければ false + +flag2 : 交点が面内にあれば true,なければ false + +val1,val2 : 線分についてのパラメータ値,平面についてのパラメータ値 + +描画方法は,"put" または "i" , "e" 。 + +\hspace{10mm} put : 幾何点を作る -\vspace{\baselineskip} -【例】いくつか記述例を示す。 +\hspace{10mm} i : 線分内にあれば点を描く - \verb|Putpoint3d(["A",[2,1,3]]);| - - \verb|Putpoint3d(["A",[1,1,1],"C",[1,0,1]],"fix");| - - \verb|Putpoint3d(["A",[2,1,3]],"free");| - -\vspace{\baselineskip} - なお,この関数は幾何点を作るものであり,TeXには出力されない。TeXに点を出力するには,\hyperlink{pointdata}{Pointdata()} または \hyperlink{drwpt}{Drawpoint()}を併用する。 +\hspace{10mm} e : 平面で交われば点を描く - 空間における点の座標は,点名に"3d"を付加した名前の変数に代入される。たとえば,点Aの座標はA3dである。これにより,点の座標を取得できる。 +\vspace{\baselineskip} +【例】交点の有無と戻り値 -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +次のスクリプトで\verb|p2| を変えたときの戻り値の \verb|flag1, flag2| -\vspace{\baselineskip} -\hypertarget{readobj}{} -\item[関数] Readobj(ファイル名) -\item[機能] objファイルを読み込む。 -\item[説明] 小林・鈴木・三谷による整面凸多面体のデータは\\ -\hspace*{20mm}\url{http://mitani.cs.tsukuba.ac.jp/polyhedron/}\\ -からダウンロードできる。\verb|polyhedrons_obj|を,例えば,ユーザホームのketcindy作業フォルダに入れておく。 \begin{verbatim} - Setdirectory(gethome()+"/ketcindy/polyhedrons_obj"); - polydt=Readobj("r02.obj"); - Setdirectory(Dirwork); +p1=[1,-1,0]; +p2=[0,0,1/2]; +p3=[0,1,0]; +p4=[-1,0,0]; +p5=[0,0,1]; +Spaceline("1",[p1,p2]); +Spaceline("2",[p3,p4,p5,p3]); +ret=IntersectsgpL("P",[p1,p2],[p3,p4,p5],"put"); +println("flag1="+ret_2+": flag2="+ret_3); +\end{verbatim} +\begin{layer}{150}{0} +\putnotese{10}{20}{ \input{Fig/wire01}} +\putnotese{60}{20}{ \input{Fig/wire02}} +\putnotese{10}{60}{ \input{Fig/wire03}} +\putnotese{60}{60}{ \input{Fig/wire04}} +\end{layer} + \begin{verbatim} + p2=[0,0,1/2]; p2=[-1,1,1]; + flag1=false : flag2=true flag1=true : flag2=true + + + + + + + p2=[1,2,1]; p2=[1,0,1/2]; + flag1=true : flag2=false flag1=false : flag2=false \end{verbatim} -これで,r02.obj データが,変数 polydt に代入される。 -オプションは "size=n" で,n倍したデータにする。負の数にすると上下が反転される。 +\vspace{30mm} +【例】立方体を平面で切った図を描く。 -データはKeTCindyのdataフォルダの中にある。したがって,次のようなスクリプトを書く。読み込むのは一度だけなので, Draw スロットではなくInitialization スロットに置けばよいが,コードの可読性を高めるには Draw スロットでもよい。 + いろいろな手順が考えられるが,ここでは次の手順で描く。 + + (1) 立方体の頂点をとる。1辺の長さをHnとし,軸上の点をPutaxes3d()でとる。 + +(2) 切断面を決める点E,F,Gを辺上の自由点としてPutonseg3d()でとる。 -この多面体データは,頂点リストと面リストからなっているが,頂点リストは座標のリストなので,読み込んで表示するときには,点の名称を v1,v2,・・・ とする。 +(3) E,F,Gを通る平面と,辺AC,DYとの交点をとり,M,Nとする。 -読み込んだあとの使い方を含めて例を示す。 +(4) 全体を多面体として面データを作って描画する。 +\begin{verbatim} + Hn=3; + Putaxes3d(Hn); + Putpoint3d("A",[Hn,Hn,0]); + Putpoint3d("B",[Hn,0,Hn]); + Putpoint3d("C",[Hn,Hn,Hn]); + Putpoint3d("D",[0,Hn,Hn]); + Putonseg3d("E",X,B); + Putonseg3d("F",Z,B); + Putonseg3d("G",Z,D); + IntersectsgpL("M","A-C","E-F-G","put"); + IntersectsgpL("N","D-Y","E-F-G","put"); + phd=Concatobj([[O,X,A,Y],[X,A,M,E],[A,Y,N,M],[Y,N,G,Z,O], + [O,Z,F,E,X],[Z,F,G],[E,M,N,G,F]]); + VertexEdgeFace("1",phd); + Nohiddenbyfaces("1","phf3d1"); +\end{verbatim} +スクリプトを実行後,点E,F,Gをドラッグして適当な位置の断面にする。 -\begin{layer}{150}{0} -\putnotese{80}{0}{ \input{Fig/readobj}} -\end{layer} +\begin{center}\includegraphics[bb=0 0 713.04 327.02 , width=10cm]{Fig/IntersectsgpL0.pdf}\end{center} +できた図は下図左。これに,次のスクリプトを追加すれば,断面上方の立方体の各辺も点線で描かれる。(下図右) +\begin{verbatim} + Spaceline("1",[E,B,F],["do"]); + Spaceline("2",[B,C,M],["do"]); + Spaceline("3",[C,D,N],["do"]); + Spaceline("4",[D,G],["do"]); +\end{verbatim} +\begin{center} \input{Fig/IntersectsgpL1} \input{Fig/IntersectsgpL2} \end{center} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +%------------------- Sfcutparadatacdy ----------------------------------------------- \vspace{\baselineskip} -【例】\verb|polydt|を用いて正八面体を描く +\hypertarget{sfcutparadatacdy}{} +\item[関数] Sfcutparadatacdy(name,面,曲面,options) +\item[機能] 平面と曲面の交線を求める。 +\item[説明] 面の方程式はx,y,zの方程式,曲面は媒介変数表示で与える。 +\vspace{\baselineskip} +【例】円錐を平面$y+2z=3$で切った断面を表示する。 +\begin{layer}{150}{0} +\putnotese{70}{0}{\input{Fig/sfcut}} +\end{layer} \begin{verbatim} - - VertexEdgeFace("1",polydt); - Nohiddenbyfaces("1","phf3d1"); +fd=[ + "p", + "x=r*cos(t)","y=r*sin(t)","z=2*(2-r)", + "r=[0,2]","t=[0,2*pi]","e" +]; +Startsurf(); +Sfbdparadata("1",fd); +Sfcutparadatacdy("1","y+2*z=3",fd); +ExeccmdC("1"); \end{verbatim} +%\begin{center} \input{Fig/sfcut} \end{center} + +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -主なデータは次の通り。 + %------------------Partcrv3d ----------------------------------------------- \vspace{\baselineskip} - \input{Fig/kobayashi} +\hypertarget{partcrv3d}{} +\item[関数] Partcrv3d(name,始点,終点,PD) +\item[機能] 部分曲線のプロットデータを作成する +\item[説明] 曲線PDにおいて,始点から終点までのプロットデータを作成する。 -この他にn01〜n92まで整面凸多面体がある。 +始点と終点は,プロットデータの番号もしくは曲線上にとった点の識別名で示す。 +\vspace{\baselineskip} +【例】螺旋を描き一部分を太くする。PutonCurve3d() で螺旋上に点C,Dができるので,ドラッグして適当な位置に移動する。 +\begin{verbatim} + Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,4]"); + Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["Num=100"]); + PutonCurve3d("C","sc3d1"); + PutonCurve3d("D","sc3d1"); + Partcrv3d("1",C,D,"sc3d1",["dr,3"]); + Letter([C,"n2","C",D,"n2","D"]); +\end{verbatim} + ここで,\verb|"sc3d1"| は,螺旋,\verb|"part3d1"| は,部分曲線のプロットデータである。 + +\begin{center} \input{Fig/partcrv3d1} \end{center} -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} +【例】稲妻状の螺旋を点線で描き,その一部を実線にする。位置はプロットデータの番号で示す。小数にすると曲線を分割している線分の途中の位置になる。 +\begin{verbatim} +Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["Num=10","do"]); +Partcrv3d("1",3.3,8.5,"sc3d1"); +\end{verbatim} +\begin{center} \input{Fig/partcrv3d2} \end{center} +%------------------Reflectdata3d----------------------------------------------- \hypertarget{reflectdata3d}{} \item[関数] Reflectdata3d(name , PDlist , list , options) \item[機能] PDの鏡映を作る -\item[説明] 第3引数のタイプにより,点に関する鏡映,直線に関する鏡映,面に関する鏡映を作る。 +\item[説明] 第3引数のタイプにより,点に関する鏡映,直線に関する鏡映,面に関する鏡映を作る。戻り値は鏡映したプロットデータのリスト。 \vspace{\baselineskip} 【例】点A,B,C,D,Eを空間にとり,三角形ABCの鏡映を作る。 \begin{verbatim} -Putpoint3d(["A",[0,-2,0],"B",[2,-2,0],"C",[1,-2,2],"D",[1,0,1], - "E",[1,0,0]]); +Putpoint3d(["A",[0,-2,0],"B",[2,-2,0],"C",[1,-2,2],"D",[1,0,1],"E",[1,0,0]]); Spaceline("1",[A,B,C,A]); \end{verbatim} @@ -6764,7 +7183,8 @@ Spaceline("1",[A,B,C,A]); \hspace{20mm} \input{Fig/reflectdata3d03} - + + %------------------Reflectpoint3d----------------------------------------------- \vspace{\baselineskip} \hypertarget{reflectpoint3d}{} \item[関数] Reflectpoint3d(座標,リスト) @@ -6780,12 +7200,12 @@ Spaceline("1",[A,B,C,A]); 平面BCDに関する鏡映点 \verb| Reflectpoint3d(A3d,[B3d,C3d,D3d]);| - + %------------------Rotatedata3d ----------------------------------------------- \vspace{\baselineskip} \hypertarget{rotatedata3d}{} \item[関数] Rotatedata3d(name,PDリスト,vec,角度,options) \item[機能] プロットデータを回転 -\item[説明] プロットデータを,原点を始点とするベクトルvec 周りに回転する。複数のプロットデータをまとめて回転することができる。 +\item[説明] プロットデータを,原点を始点とするベクトルvec 周りに回転する。複数のプロットデータをまとめて回転することができる。戻り値は回転したプロットデータのリスト。 options として,中心点(vecの始点),線種を指定することができる。 @@ -6795,7 +7215,7 @@ options として,中心点(vecの始点),線種を指定することが Xyzax3data("","x=[-5,4]","y=[-5,5]","z=[-5,4]",["a","O"]); Putpoint3d(["A",[0,-2,0],"B",[2,-2,0],"C",[1,-2,2],"D",[1,-2,3]]); Spaceline("1",[A,B,C,A]); - Spaceline("2",[C,D]); + Spaceline([C,D]); Rotatedata3d("1",["sl3d1","CD3d"],[0,0,1],pi/2,["dr,2"]); Letter([A,"s","A",B,"w","B",C,"ne","C",D,"ne","D"]); \end{verbatim} @@ -6808,6 +7228,7 @@ options として,中心点(vecの始点),線種を指定することが \input{Fig/rotatedata3d01} \hspace{5mm} \input{Fig/rotatedata3d02} %\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + %------------------Rotatepoint3d ----------------------------------------------- \vspace{\baselineskip} \hypertarget{rotatepoint3d}{} \item[関数] Rotatepoint3d(座標, vec , 角度, [点] ) @@ -6821,7 +7242,8 @@ options として,中心点(vecの始点),線種を指定することが \verb| Putpoint3d("A",[0,-1,0]);| \\ \verb| Rotatepoint3d(A3d,[0,0,1],pi/2); | // 戻り値は [1,0,0]\\ \verb| Rotatepoint3d(A3d,[0,0,1],pi/2,[1,1,0]); | // 戻り値は [3,0,0]\\ - + + %------------------Scaledata3d ----------------------------------------------- \vspace{\baselineskip} \hypertarget{scaledata3d}{} \item[関数] Scaledata3d(name , PDリスト , vec , [中心,options]) @@ -6841,7 +7263,7 @@ options として,中心点(vecの始点),線種を指定することが \end{verbatim} \hspace{20mm}\input{Fig/scaledata3d} - +%------------------Scalepoint3d----------------------------------------------- \vspace{\baselineskip} \hypertarget{scalepoint3d}{} \item[関数] Scalepoint3d(点,vec,中心) @@ -6859,481 +7281,414 @@ options として,中心点(vecの始点),線種を指定することが \end{verbatim} 点Bの位置は(4,-3,5)になる。 -\vspace{\baselineskip} -\hypertarget{sf3data}{} -\item[関数] Sf3data(name,リスト,options) -\item[機能] 陰線処理なしの曲面をワイヤーフレームモデルで描く -\item[説明] リストは,関数式と定義域,境界指定をそれぞれ文字列にしたもののリスト。 - -optionsは,解像度(各変数に対応する分割数)とメッシュの密度,境界指定。 - -解像度は,"Num=[a,b]" で指定。初期値はa,bとも25 - -メッシュ密度は,縦横で "Wire=[a,b]" で指定。初期値はa,bとも20 - -境界指定は"ewsn"で行う。"ewsn" の意味は次のように考える。 - -変数が u,v のとき,u,v平面において,$a \leq u \leq b,c \leq v \leq d$ の矩形を考え, -その東西南北(ewsn)の境界を示す。 - - \begin{center} \input{Fig/ewsn} \end{center} - -\vspace{\baselineskip} -関数式のパターンはつぎの3通り。 - -\vspace{\baselineskip} -(1) $z=f(x,y)$ - - 【例】:$z=x^2-y^2$を定義域$x=[-2,2],y=[-2,2]$ で描画する。 - - \verb|Sf3data("1",["z=x^2-y^2","x=[-2,2]","y=[-2,2]"])|; - - \begin{center} \input{Fig/saddle1} \end{center} - - 【例】:同じく,解像度をx,yとも10,メッシュの数を縦横とも10にする。 - - 解像度,メッシュ密度とも下げるので粗い描画となる。 - -\verb|Sf3data("1",["z=x^2-y^2","x=[-2,2]","y=[-2,2]"],| - -\verb|["Num=[10,10]","Wire=[10,10]"]);| - +%------------------ Translatedata3d ----------------------------------------------- \vspace{\baselineskip} -(2) $z=f(x,y),x=g(R,T),y=h(R,T)$ +\hypertarget{translatedata3d}{} +\item[関数] Translatedata3d(name,PD,平行移動量) +\item[機能] 空間プロットデータを平行移動 +\item[説明] PDで表される図形を,平行移動する。戻り値は平行移動したプロットデータのリスト。 - x,y の媒介変数 r,t は大文字にする。 - \vspace{\baselineskip} -【例】:次図左 - -\verb|fd=["z=4-(x^2+y^2)","x=R*cos(T)","y=R*sin(T)","R=[0,2]","T=[0,2*pi]"];| +【例】曲線 sc3d1 をy軸方向に2だけ平行移動する。 - \verb|Sf3data("1",fd);| +\verb|Translatedata3d("1",["sc3d1"],[0,2,0]);| -【例】:次図右\\ - \verb|fd=["z=sin(sqrt(abs(x^2+y^2)))","x=r*cos(t)","y=r*sin(t)",| - -\verb|"r=[0,3]","t=[0,2*pi]"];| - -\verb|Sf3data("1",fd);| - - \begin{center} \input{Fig/parabola} \input{Fig/sf3ddata3} \end{center} - -(3) $x=f(u,v),y=g(u,v),z=h(u,v),$ +結果として,もとの曲線と平行移動した曲線の2つが描かれる。 - この場合,(2)と区別するために,"p" を先頭につけておく。 +\vspace{\baselineskip} +【例】多面体の平行移動\\ +VertexEdgeFace() で描いた多角形はこの関数では平行移動できないので,面データを直接操作して平行移動を行う。 - \vspace{\baselineskip} - 【例】球面 - - \verb|fd=["p","x=2*sin(u)*cos(v)","y=2*sin(u)*sin(v)","z=2*cos(u)",| - -\verb|"u=[0,pi]","v=[0,2*pi]"];| -\verb|Sf3data("1",fd);| +たとえば,小林・鈴木・三谷による多面体データ polyhedrons obj を用いて正八面体を描く場合,次のようにする。$y$軸方向に2だけ平行移動する場合である。 -\begin{center} \input{Fig/sf3ddata4} \end{center} +\begin{verbatim} + Setdirectory( Dirhead+"/data/polyhedrons_obj"); + phd=Readobj("r02.obj",["size=2"]); + Setdirectory(Dirwork); + dn=length(phd_1); + repeat(dn,s,phd_1_s=phd_1_s+[0,2,0]); + VertexEdgeFace("1",phd); +\end{verbatim} + \begin{center} \input{Fig/translate01} \end{center} \begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\hypertarget{sfbdparadata}{} -\item[関数] Sfbdparadata(name,式,options) -\item[機能] 空間曲面の陰線処理 -\item[説明] 曲面について陰線処理を行う。 - 曲面の式はSf3data()の場合と同じ。ただし,(2) と(3)のパターンでは式の最後に境界の指定 ewns を明示する必要がある。(3)では境界の指定を" "(中は半角スペース)とする。省略すると不要な境界線が表示されることがある。境界指定については,Sf3data()の項を参照のこと。 - -optionsは,"Wait=n","r","m",線種。Wait の初期値は30。 - - "r","m"に関しては,オプションなしまたは,”” のとき - - i) データファイルがなければ,新しく作る - - ii) データファイルが既にあればそれを読み込む - -"m" のとき,強制的にデータファイルを作り直す。 - -"r" のとき,すでにあるデータファイルを読み込む。 - -この処理は時間がかかるため,この関数を実行した状態で画面上のスライダを動かそうとすると反応が悪くなる。そこで,Isangle() を用いて,スライダの点を選択しているときはワイヤフレームモデルを描画するようにするとよい。 - -また,この関数はデータを作るだけなので,表示するには ExeccmdC() を用いる。 - -C言語の環境がない場合は,ExeccmdC() が使えないので,SfbdparadataR(name,式,optons1,optons2) を使う。options2には陰線の表示方法について "nodisp" または線種 を指定する。 初期設定は"nodisp" 。options2のみ指定するときは,options1に [""] (空文字)を書いておく。 +%------------------Translatepoint3d( ----------------------------------------------- +\hypertarget{translatepoint3d}{} +\item[関数] Translatepoint3d(座標,平行移動量) +\item[機能] 空間点を平行移動 +\item[説明] 点を平行移動する。 \vspace{\baselineskip} -【例】サドル面 - -陰線を消去して表示(下図左) -\begin{verbatim} - fd=["z=x^2-y^2","x=[-2,2]","y=[-2,2]"]; - if(Isangle(), - Sf3data("1",fd); - , - Startsurf(); - Sfbdparadata("1",fd); - ExeccmdC("1",[],["nodisp"]); - ); -\end{verbatim} -全体を実線で太めにして,陰線を点線で表示(下図右): \verb|ExeccmdC()| を変更する。 -\begin{verbatim} - ExeccmdC("1",["dr,2"],["do"]); -\end{verbatim} - \begin{center} \input{Fig/sfbdpara01} \input{Fig/sfbdpara02}\end{center} - -【例】放物面 : 式を変更する。 +【例】点A(1,0,0) を(-1,1,1)だけ平行移動した点をBとする。点Aの空間座標は A3d で表される。 \begin{verbatim} - fd=["z=4-(x^2+y^2)","x=R*cos(T)","y=R*sin(T)","R=[0,2]","T=[0,2*pi]","e"]; + Putpoint3d(["A",[1,0,0]]); + pt=Translatepoint3d(A3d,[-1,1,1]); + Putpoint3d(["B",pt]); \end{verbatim} - - 陰線を消去(下図左):\verb|ExeccmdC("1",[],["nodisp"]);| - - 陰線を破線で表示(下図右):\verb|ExeccmdC("1",[],["da"]);| - \begin{center} \input{Fig/sfbdpara03} \input{Fig/sfbdpara04} \end{center} - -なお,表示については,\hyperlink{execcmdc}{ExeccmdC()} を参照のこと。 - +\vspace{\baselineskip} \begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\hypertarget{skeletonparadata}{} -\item[関数] Skeletonparadata(name,PDリスト,PDリスト,option) -\item[機能] 陰線処理(スケルトン処理)をおこなう -\item[説明] 描画されている線と軸について陰線処理をおこなう。 - -第2引数の線(プロットデータ)が,第3引数の線(プロットデータ)によって隠される部分を消去する。第2,第3引数を省略した場合は,すべての線について,互いの陰線処理をおこなう。optionで消去する部分の長さを指定できる。\\ -他のオプション\\ - \verb|"No=点リスト"| 点リストの点が選ばれているときは実行しない\\ - \verb|"File=y/m/n (n)"| データファイルを作るか\\ - \verb|"Check=点リスト"| 点リストの点が変更されていたら,ファイルを作り直す -\vspace{\baselineskip} -【例】螺旋と線分,座標軸の陰線処理 - -次のように螺旋と線分,座標軸を描いておく。 -\begin{verbatim} - Xyzax3data("","x=[-5,5]","y=[-5,4]","z=[-5,3]"); - Putpoint3d(["A",[0,-2,-2]]); - Putpoint3d(["B",[-1,1,3]]); - Spaceline([A,B]); - Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["Num=100"]); -\end{verbatim} -座標軸のプロットデータは ax3d,線分は AB3d,螺旋は sc3d1 である。これに対し, + \end{description} +\newpage +% その他 ================================== +\subsection{その他} -\hspace{10mm} \verb|Skeletonparadata("1");| +\begin{description} - 描画されている線と軸について陰線処理をおこなう。(図左) -\hspace{10mm} \verb|Skeletonparadata("1",[2]);| +%------------------- Perpplane----------------------------------------------- +\vspace{\baselineskip} +\hypertarget{perpplane}{} +\item[関数] Perpplane(点名,点,ベクトル,option) +\item[機能] 点を通り線分に垂直な平面上に基準点を2つとる +\item[説明] 引数の点名は,作成する2点で "A-B" の形 - 重なった部分の空きを2にする。(図中央) - -\hspace{10mm} \verb|Skeletonparadata("1",["AB3d","ax3d"],["sc3d1"]);| +第2引数は通る点の名称または座標 -螺旋によって隠れる部分だけ消去する。(図右) +第3引数は法線ベクトル + +optionは "put" で,2つの幾何点を作図する。optionがない場合は幾何点は作らず,無名の点のみを表示する。put以外の文字列を書いたときは無効な命令とし,何も作成されない。 + +記述例を示すと + + \verb|Perpplane("A-B","P",[1,1,1],"put");| + +点Pを通り,法線ベクトル(1,1,1)に垂直な平面上に点A,Bをとる。 -\begin{center} \input{Fig/skeletonparadata01} \input{Fig/skeletonparadata02} - \input{Fig/skeletonparadata03} \end{center} + \verb|Perpplane("A-B","P",P3d-O3d);| + + 点Pを通り,線分OPに垂直な平面上に点A,Bをとる。 + これらにおいて,PAとPBは垂直で,PA=PB=1 となる。 + +\vspace{\baselineskip} +【例】ベクトル $\vec{p}=(1,1,1)$ に垂直で点$(1,1,1)$を通る平面ABCDを描く。 -このほか, + 点A,B,C,Dは作図ツールで適当に取っておく。正確な位置はスクリプトで決める。 -\hspace{10mm} \verb|Skeletonparadata("1",["AB3d","ax3d"],["sc3d1"],[2]);| +\begin{layer}{150}{0} +\putnotese{80}{20}{ \input{Fig/perpplane}} +\end{layer} -\hspace{10mm} \verb|Skeletonparadata("1",["AB3d"],["ax3d","sc3d1"]);| +\begin{verbatim} + Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,4]"); + Putpoint3d(["O",[0,0,0]]); + Putpoint3d(["P",[1,1,1]]); + Perpplane("E-F","P",P3d-O3d,"put"); + vec1=2*(E3d-P3d); + vec2=2*(F3d-P3d); + Putpoint3d(["A",P3d+vec1+vec2]); + Putpoint3d(["B",P3d+vec1-vec2]); + Putpoint3d(["C",P3d-vec1-vec2]); + Putpoint3d(["D",P3d-vec1+vec2]); + Spaceline("1",[A,B,C,D,A]); + Arrowdata([O,P],["dr,2"]); + Letter([P,"w","P",A,"ne","A",B,"e","B",C,"ws","C",D,"nw","D",]); + Skeletonparadata("1"); +\end{verbatim} -も可能である。 \begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} \vspace{\baselineskip} + %-----------------Perppt( ----------------------------------------------- +\hypertarget{perppt}{} +\item[関数] Perppt(点名,点,点リスト,option) +\item[機能] 平面に下ろした垂線の足を求める +\item[説明] 第2引数の点から,第3引数の点リストで決まる平面に下した垂線の足を,第1引数の名前の点とする。 -\hypertarget{spacecurve}{} -\item[関数] Spacecurve(name,式,定義域,options) -\item[機能] 空間曲線を描く -\item[説明] 媒介変数で表された曲線を描く。optionは解像度 Num - -\vspace{\baselineskip} -【例】螺旋を描く +オプションは次の通り。 初期設定は "draw" -\verb|Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["Num=100"]);| - -\vspace{\baselineskip} - \begin{center} \input{Fig/rasen} \end{center} +draw:点を打つ。幾何点は作らない -\hypertarget{spaceline}{} -\item[関数] Spaceline(name,list) -\item[機能] 折れ線を描く -\item[説明] 点の名称または座標のリストを与えて折れ線を描く。平面での Listplot() にあたる。 +put :幾何点を作る -options は線種(dr,da,do) +none:計算だけ行い,点は作図しない。 \vspace{\baselineskip} -【例】いくつか示す。 - -・Spaceline("1",[[2,5,1],[4,2,3]]); 指定された2点を結んだ線分を描く。 - -・Spaceline("2",[A,B,C,A]); 作図されている2点A,B,Cを結んだ三角形を描く。 - - -・節点を表示する場合は,Pointdata3d() で描画する。 +【例】原点から点ABCを通る平面に下した垂線の足Hの座標を求める。 -\begin{layer}{150}{0} -\putnotese{80}{10}{ \input{Fig/oresenex01}} -\end{layer} + \verb|Perppt("H","O","A-B-C","none");| 表示はされない。 + + \verb|Perppt("H","O","A-B-C");| Hの位置に緑色の点が表示される。 + + \verb|Perppt("H","O","A-B-C","put");| 幾何点Hが作図される。 + + いずれの場合も,Hの座標は変数H3d に代入される + +\vspace{\baselineskip} +作図例 \begin{verbatim} - pt=[[2,0,0],[2,0,2],[2,2,2],[0,2,2],[0,4,2],[0,4,4]]; - Spaceline("1",pt); - Pointdata3d("1",pt,["Size=3"]); + Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,4]"); + Putpoint3d("O",[0,0,0]); + Putpoint3d("A",[3,0,0]); + Putpoint3d("B",[0,3,0]); + Putpoint3d("C",[0,0,3]); + Perppt("H","O","A-B-C","put"); + Spaceline("1",[A,B,C,A]); + Spaceline("2",[O,H]); + Letter([A,"nw","A",B,"ne","B",C,"ne","C",O,"nw","O",H,"ne","H"]); \end{verbatim} -点の名前が必要であれば - -\verb|pname=apply(1..6,"P"+text(#));| +\vspace{\baselineskip} +\begin{center} \input{Fig/perppt} \end{center} + %------------------Projcoordpara ----------------------------------------------- +\hypertarget{projcoordpara}{} +\item[関数] Projcoordpara(座標) +\item[機能] 投影座標を求める +\item[説明] 空間座標を平面に投影した座標を求める。 -のようにして,名前リストを作ることができる。 +戻り値の第1,第2要素はCinderellaの描画面のx,y座標。第3要素はxy平面に垂直なzの座標で.投影面からの(符号付)距離を表す。 \vspace{\baselineskip} -\hypertarget{translatedata3d}{} -\item[関数] Translatedata3d(name,PD,平行移動量) -\item[機能] 空間プロットデータを平行移動 -\item[説明] PDで表される図形を,平行移動する。 +【例】\verb|Projcoordpara([3,1,2]);| -\vspace{\baselineskip} -【例】曲線 sc3d1 をy軸方向に2だけ平行移動する。 + 戻り値は [-0.65,1.7,3.27] のようになる。(視点によって値は異なる) -\verb|Translatedata3d("1",["sc3d1"],[0,2,0]);| - -結果として,もとの曲線と平行移動した曲線の2つが描かれる。 + %------------------Readobj----------------------------------------------- \vspace{\baselineskip} -【例】多面体の平行移動\\ -VertexEdgeFace() で描いた多角形はこの関数では平行移動できないので,面データを直接操作して平行移動を行う。 - -たとえば,小林・鈴木・三谷による多面体データ polyhedrons obj を用いて正八面体を描く場合,次のようにする。$y$軸方向に2だけ平行移動する場合である。 - +\hypertarget{readobj}{} +\item[関数] Readobj(ファイル名) +\item[機能] objファイルを読み込む。 +\item[説明] 小林・鈴木・三谷による整面凸多面体のデータは\\ +\hspace*{20mm}\url{http://mitani.cs.tsukuba.ac.jp/polyhedron/}\\ +からダウンロードできる。\verb|polyhedrons_obj|を,例えば,ユーザホームのketcindy作業フォルダに入れておく。 \begin{verbatim} - Setdirectory( Dirhead+"/data/polyhedrons_obj"); - phd=Readobj("r02.obj",["size=2"]); + Setdirectory(gethome()+"/ketcindy/polyhedrons_obj"); + polydt=Readobj("r02.obj"); Setdirectory(Dirwork); - dn=length(phd_1); - repeat(dn,s,phd_1_s=phd_1_s+[0,2,0]); - VertexEdgeFace("1",phd); \end{verbatim} - \begin{center} \input{Fig/translate01} \end{center} +これで,r02.obj データが,変数 polydt に代入される。 -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +オプションは "size=n" で,n倍したデータにする。負の数にすると上下が反転される。 -\hypertarget{translatepoint3d}{} -\item[関数] Translatepoint3d(座標,平行移動量) -\item[機能] 空間点を平行移動 -\item[説明] 点を平行移動する。 +データはKeTCindyのdataフォルダの中にある。したがって,次のようなスクリプトを書く。読み込むのは一度だけなので, Draw スロットではなくInitialization スロットに置けばよいが,コードの可読性を高めるには Draw スロットでもよい。 -\vspace{\baselineskip} -【例】点A(1,0,0) を(-1,1,1)だけ平行移動した点をBとする。点Aの空間座標は A3d で表される。 -\begin{verbatim} - Putpoint3d(["A",[1,0,0]]); - pt=Translatepoint3d(A3d,[-1,1,1]); - Putpoint3d(["B",pt]); -\end{verbatim} -\vspace{\baselineskip} -\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +この多面体データは,頂点リストと面リストからなっているが,頂点リストは座標のリストなので,読み込んで表示するときには,点の名称を v1,v2,・・・ とする。 -\hypertarget{vertexedgeface}{} -\item[関数] VertexEdgeFace(name,面データ,options) -\item[機能] 多面体の面データを用いて多面体を描く -\item[説明] 面データは,頂点リストと,面リストからなる。面リストは,各面を構成する頂点を,外側から見て反時計回り(左回り)に並べたリストである。 +読み込んだあとの使い方を含めて例を示す。 -たとえば,四面体ABCDの面データは,[[A,B,C,D],[[1,2,3],[1,2,4],[1,3,4],[2,3,4]]] となる。 +\begin{layer}{150}{0} +\putnotese{80}{0}{ \input{Fig/readobj}} +\end{layer} -4点A,B,C,Dをとっておき,このリストを引数に与えると,四面体の辺が描かれる。 -生成されるプロットデータは, +\vspace{\baselineskip} +【例】\verb|polydt|を用いて正八面体を描く -phv3d:頂点のリスト -phe3d:辺のリスト +\begin{verbatim} -phf3d:面リスト + VertexEdgeFace("1",polydt); + Nohiddenbyfaces("1","phf3d1"); +\end{verbatim} -なお,それぞれ末尾にnameが付加される。 +主なデータは次の通り。 \vspace{\baselineskip} -【例】:正四面体を描く -\begin{verbatim} - Putpoint3d("A",2*[-1,-1/sqrt(3),0]); - Putpoint3d("B",2*[1,-1/sqrt(3),0]); - Putpoint3d("C",2*[0,sqrt(3)-1/sqrt(3),0]); - Putpoint3d("D",2*[0,0,sqrt(3)]); - phd=Concatobj([[A,B,C],[A,B,D],[A,C,D],[B,C,D]]); - VertexEdgeFace("1",phd); -\end{verbatim} - \begin{center} \input{Fig/vertex01} \end{center} + \input{Fig/kobayashi} -%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} -\hypertarget{wireparadata}{} -\item[関数] Wireparadata(name,PD,式,整数,整数,optons) -\item[機能] 曲面のワイヤフレームを陰線処理してプロットデータを作る。 -\item[説明] PDは,第3引数の式で描いたワイヤフレームモデルのプロットデータ名。第4,第5引数は分割線の数。 +この他にn01〜n92まで整面凸多面体がある。 -options には "r","m","Wait=n" が指定できる。Wait の初期値は30。 +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + - "r","m"に関しては,オプションなしまたは,”” のとき - - i) データファイルがなければ,新しく作る - - ii) データファイルが既にあればそれを読み込む - - "m" のとき,強制的にデータファイルを作り直す。 +%-------------------Xyzcoord ----------------------------------------------- +\vspace{\baselineskip} +\hypertarget{xyzcoord}{} +\item[関数] Xyzcoord(P.x,P.y,Pz.y) +\item[機能] 主副画面で決まる点の座標 +\item[説明] Cinderellaの描画面上の点が表す空間座標を求める + + 点Pについて,主画面の点Pに対応するのが副画面のPzである。点Pの2次元座標はP.x,P.yで,Pzのy座標はPz.yで表される。これを引数として与えると,点Pの空間座標が返される。 - "r" のとき,すでにあるデータファイルを読み込む。 +\vspace{\baselineskip} +【例】点Aをドラッグして動かしたとき,Aの座標を求める。 +\verb|println(Xyzcoord(A.x,A.y,Az.y));| -曲面の陰線処理を行うので,Sfbdparadata() とペアで使う。 - -この処理は時間がかかるため,この関数を実行した状態で画面上のスライダを動かそうとすると反応が悪くなる。そこで,Isangle() を用いて,スライダの点を選択しているときはワイヤフレームモデルを描画するようにするとよい。 - -また,この関数はデータを作るだけなので,表示するには \hyperlink{execcmdc}{ExeccmdC()} を用いる。 - -C言語の環境がない場合は,ExeccmdC() が使えないので,WireparadataR(name,PD,式,整数,整数,optons1,optons2) を使う。options2には陰線の表示方法について "nodisp" または線種 を指定する。 初期設定は"nodisp" 。options2のみ指定するときは,options1に [""] (空文字)を書いておく。 +により,コンソールに座標が表示される。 +%------------------- Isangle ----------------------------------------------- +\vspace{\baselineskip} +\hypertarget{isangle}{} +\item[関数] Isangle() +\item[機能] 角度スライダ(視点スライダ)の選択判断 +\item[説明] 角度スライダを選択しているときは true ,そうでないときは false を返す。 -\vspace{\baselineskip} -【例】式のタイプ別に例を示す。 +曲面の描画・陰線処理には時間がかかるため,角度スライダを動かすと反応が悪くなる。そこで,角度スライダを選択しているときは曲面の描画をしないようにすることで反応がよくなる。 \vspace{\baselineskip} -サドル面 +【例】放物面の描画 -\begin{layer}{150}{0} -\putnotese{85}{5}{ \input{Fig/wirepara1}} -\end{layer} +次のようにすると,スライダの点を選んでいる間はワイヤフレームモデルが描かれ,画面上の他の部分をクリックして選択状態が解除されると陰線処理された放物面が描かれる。 \begin{verbatim} - fd=["z=x^2-y^2","x=[-2,2]","y=[-2,2]"]; + fd=[ + "z=4-(x^2+y^2)", + "x=R*cos(T)","y=R*sin(T)", + "R=[0,2]","T=[0,2*pi]","e" + ]; if(Isangle(), - Sf3data("1",fd); - , - Startsurf(); - Sfbdparadata("1",fd); - Wireparadata("1","sfbd3d1",fd,4,5); - ExeccmdC("1"); - ); + Sf3data("1",fd); + , + Startsurf(); + Sfbdparadata("1",fd); + Crvsfparadata("1","ax3d","sfbd3d1",fd); + ExeccmdC("1"); + ); \end{verbatim} -回転放物面:次を変更 +%------------------- Dist3d ----------------------------------------------- +\hypertarget{dist3d}{} +\item[関数] Dist3d(a1,a2) +\item[機能] 空間の2点間の距離を返す +\item[説明] 引数a1,a2 は作図点の名称,空間点の名称のいずれでもよい。 -\begin{layer}{150}{0} -\putnotese{85}{10}{ \input{Fig/wirepara2}} -\end{layer} +次の3通りの記法は同じ結果を返す。混在も可 \begin{verbatim} - fd=["z=4-(x^2+y^2)","x=r*cos(t)","y=r*sin(t)","r=[0,2]","t=[0,2*pi]","e"]; - Wireparadata("1","sfbd3d1",fd,5,7); + Dist3d("A","B"); + Dist3d(A,B); + Dist3d(A3d,B3d); \end{verbatim} -\vspace{25mm} -球面 - -このタイプでは,媒介変数形式の識別のため,先頭に "p" をつけておく。 +%------------------- Embed ----------------------------------------------- +\vspace{\baselineskip} +\hypertarget{embed}{} +\item[関数] Embed(name,PDリスト,式,変数リスト) +\item[機能] 2D図形の空間内平面へ埋め込む +\item[説明] 第2引数は2Dの図形のプロットデータのリスト,式と変数は平面を記述する式と変数。平面は原点$vo$と2つの基本ベクトル $\overrightarrow{vx},\overrightarrow{vy}$を用いて,$vo+x \cdot \overrightarrow{vx}+y \cdot \overrightarrow{vy}$ の形で表すことができる。変数(基本ベクトルの係数)は$x,y$ でなく,$s,t$ でもよい。式,変数リストともに文字列にする。また,基本ベクトルは直交していなくてもよいし,長さが異なってもよいが,縦横同じスケールの直交座標系にするのがわかりやすいだろう。 -\begin{layer}{150}{0} -\putnotese{80}{0}{ \input{Fig/wirepara3}} -\end{layer} +\vspace{\baselineskip} +【例】正三角形と外接円を空間内の平面に埋め込む \begin{verbatim} - fd=["p","x=2*sin(u)*cos(v)", - "y=2*sin(u)*sin(v)", - "z=2*cos(u)","u=[0,pi]", - "v=[0,2*pi]","s"]; - Sfbdparadata("1",fd); - Wireparadata("1","sfbd3d1",fd,12,12); + Xyzax3data("","x=[-5,4]","y=[-10,4]","z=[-5,5]",["a","O"]); + Spaceline("1",[[3,0,0],[3,6,0],[3,6,6],[3,0,6],[3,0,0]]); + Defvar("vo=[3,3,3]"); + Defvar("vx=[0,1,0]"); + Defvar("vy=[0,0,1]"); + Putpoint3d(["A",[3,3,3]]); + Circledata("1",[[0,0],[2,0]],["nodisp"]); + Listplot("1",[[0,2],[-sqrt(3),-1],[sqrt(3),-1],[0,2]],["nodisp"]); + Embed("1",["cr1","sg1"],"vo+x*vx+y*vy","[x,y]"); + Ptsize(3); + Drawpoint(A); \end{verbatim} + \begin{center} \input{Fig/embed01} \end{center} -\vspace{8mm} -%\begin{center} \input{Fig/wirepara1} \input{Fig/wirepara2} \input{Fig/wirepara3} \end{center} - -\vspace{\baselineskip} -【例】球面で座標軸を陰線処理し,面の陰線は非表示で表す。 +ここで,Embed()で引き渡す vo,vx,vy については,Rでの変数定義が必要なので(\ketcindy では行わない)Defvar() によって定義をしている。 -\begin{layer}{150}{0} -\putnotese{70}{5}{ \input{Fig/wirepara4}} -\end{layer} +原点,基本ベクトルを,点を作図して次のようにすることもできる。この場合は Defvar() は不要。 \begin{verbatim} - fd=["p","x=2*sin(u)*cos(v)", - "y=2*sin(u)*sin(v)", - "z=2*cos(u)", - "u=[0,pi]","v=[0,2*pi]","s"]; - if(Isangle(), - Sf3data("1",fd); - , - Startsurf(); - Sfbdparadata("1",fd); - Wireparadata("1","sfbd3d1",fd,12,12); - Crvsfparadata("1","ax3d","sfbd3d1",fd); - ret=ExeccmdC("1"); - forall(1..length(ret), - if(indexof(ret_#,"wireh")>0, - Changestyle3d([ret_#],["nodisp"]); - ); - ); - ); + Putpoint3d(["A",[3,3,3],"B",[0,1,0],"C",[0,0,1]]); + Embed("1",["cr1","sg1"],"A3d+x*B3d+y*C3d","[x,y]"); \end{verbatim} -【例】トーラスを描く +\begin{center} +\includegraphics[bb=0 0 477.02 383.02 , width=6cm]{Fig/embed03.pdf} +\end{center} -式を次のように変え,軸は非表示にして,\verb|ExeccmdC("1",[],["nodisp"])| にする。 +この場合,点B,Cの座標がそのまま基本ベクトルとなっているが,原点Aに対して描画平面上にはB,Cがないので図がわかりにくい。図をわかりやすくするならば次のようにする。 +\begin{verbatim} + Putpoint3d(["A",[3,3,3],"B",[3,4,3],"C",[3,3,4]]); + Embed("1",["cr1","sg1"],"A3d+x*(B3d-A3d)+y*(C3d-A3d)","[x,y]"); +\end{verbatim} + また,平面を記述するのに,平面の原点と法線ベクトルを用いて Perpplane() を用いると,基本ベクトルが生成されるので、これを利用することができる。次のスクリプトでは,Skeletonparadata() を用いて陰線処理もしている。 \begin{verbatim} - fd=["p","x=(2+cos(u))*cos(v)","y=(2+cos(u))*sin(v)","z=sin(u)", - "u=[0,2*pi]","v=[0,2*pi]","s"]; + Xyzax3data("","x=[-5,5]","y=[-8,5]","z=[-5,5]"); + Putpoint3d(["O",[0,0,0],"P",[1,1,2]]); + Perpplane("E-F","P",P3d-O3d,"put"); + vec1=3*(E3d-P3d); + vec2=3*(F3d-P3d); + Putpoint3d(["A",P3d+vec1+vec2]); + Putpoint3d(["B",P3d+vec1-vec2]); + Putpoint3d(["C",P3d-vec1-vec2]); + Putpoint3d(["D",P3d-vec1+vec2]); + Spaceline("1",[A,B,C,D,A]); + Circledata("1",[[0,0],[2,0]],["nodisp"]); + Listplot("1",[[0,2],[-sqrt(3),-1],[sqrt(3),-1],[0,2]],["nodisp"]); + Embed("1",["cr1","sg1"],"P3d+x*(E3d-P3d)+y*(F3d-P3d)","[x,y]"); + Ptsize(3); + Drawpoint(P); + Skeletonparadata("1"); \end{verbatim} -\vspace{\baselineskip} - \begin{center} \input{Fig/wirepara5} \end{center} + \begin{center} \input{Fig/embed02} \end{center} \begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} + +%------------------- Parapt ----------------------------------------------- \vspace{\baselineskip} -\hypertarget{xyzax3data}{} -\item[関数] Xyzax3data(name,xの範囲,yの範囲,zの範囲,options) -\item[機能] 座標軸を描く -\item[説明] 描画面に座標軸を描き,プロットデータ ax3d を作成する。nameは空文字列でよい。option は次の2つ。 +\hypertarget{parapt}{} +\item[関数] Parapt(座標) +\item[機能] 点の投影面での座標 +\item[説明] 引数の空間座標に対応するCinderellaの描画面の座標を返す。 -矢じり:"an":nは数字で矢じりの大きさ。nはなくてもよい。 +\vspace{\baselineskip} +【例】\verb|Parapt([2,1,5]);| により,点(2,1,5) が表示されている描画面の座標,たとえば [-0.52,3.27] が返される。 +%\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} +\vspace{\baselineskip} +%------------------- Invparapt ----------------------------------------------- +\hypertarget{invparapt}{} +\item[関数] Invparapt(座標,PD) +\item[機能] 描画面上の座標に対応する曲線上の点の座標を返す +\item[説明] Cinderellaの描画面上の座標を与えて,それに対応する曲線上の3次元座標を返す。 -原点O:"Onesw":neswは微小位置。数字も付けられる。neswをつけない場合の初期値はsw。 +空間内の曲線を作図すると,曲線の空間内のプロットデータとともに,描画面上に描くためのプロットデータも作られる。これを利用すると,描画面上の位置から曲線上の座標を求めることができる。 -【例】 初期設定の座標軸\\ -\verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]");| - - 矢じりをつける - - \verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]","a");| - - 矢じりを大きくする - - \verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]",["a2"]);| - -原点のOを表示する。 +\vspace{\baselineskip} +【例】螺旋と線分を描いたとき,描画面上での交点(空間内の交点ではない)に対応する螺旋上の点の座標を求め部分曲線を描く。 - \verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]",["O"]);| - - 原点のOの位置を調整して右上に表示する。やじりもつける。 - - \verb|Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]",["a","Oe2n2"]);| +\begin{verbatim} + Spaceline("1",[[-1,-1,-1],[1,2,3]]); + Spacecurve("1","[2*cos(t),2*sin(t),0.2*t]","t=[0,4*pi]",["do"]); + tmp=Intersectcrvs("sl2d1","sc2d1"); + p1=Invparapt(tmp_1,"sc3d1"); + p2=Invparapt(tmp_2,"sc3d1"); + Partcrv3d("1",p1,p2,"sc3d1"); +\end{verbatim} + \begin{center}\scalebox{0.8}{ \input{Fig/invparapt}} \end{center} +ここで,sl2d1,sc2d1 は線分と螺旋の描画面上での(平面の)プロットデータである。Intersectcrvs() で平面上の交点の座標(複数あるのでリストが返る)を求め,Invparapt() で対応する螺旋上の点の座標を求めて部分曲線を描いている。実際に交わる点での部分曲線ではないことに注意。 -【注意】Putaxes3d() で点を取ると原点に点Oが作成される。この点名Oと表示が重複するのが煩わしい場合は,作図後にこのoptionをつけてから出力するとよい。 +\vspace{\baselineskip} +\hypertarget{expr3d}{} +\item[関数] Expr3d([位置, 方向, 文字列],option) +\item[機能] 文字列を表示する +\item[説明] Expr() と同じ書式。「位置(座標)」だけ,空間座標にする。 \vspace{\baselineskip} -\hypertarget{xyzcoord}{} -\item[関数] Xyzcoord(P.x,P.y,Pz.y) -\item[機能] 主副画面で決まる点の座標 -\item[説明] Cinderellaの描画面上の点が表す空間座標を求める +\hypertarget{letter3d}{} +\item[関数] Letter3d([位置, 方向, 文字列],option) +\item[機能] 文字列を表示する +\item[説明] Letter() と同じ書式。「位置(座標)」だけ,空間座標にする。 - 点Pについて,主画面の点Pに対応するのが副画面のPzである。点Pの2次元座標はP.x,P.yで,Pzのy座標はPz.yで表される。これを引数として与えると,点Pの空間座標が返される。 - \vspace{\baselineskip} -【例】点Aをドラッグして動かしたとき,Aの座標を求める。 -\verb|println(Xyzcoord(A.x,A.y,Az.y));| - -により,コンソールに座標が表示される。 +【例】三角錐ABCDを描いて,BCの中点に点Mを取ってA,Dと結ぶ。 + +\begin{layer}{150}{0} +\putnotese{90}{10}{ \input{Fig/letter3d}} +\end{layer} +\begin{verbatim} +Putpoint3d("A",2*[0,0,2*sqrt(6)/3]); +Putpoint3d("B",2*[1,-1/sqrt(3),0]); +Putpoint3d("C",2*[0,sqrt(3)-1/sqrt(3),0]); +Putpoint3d("D",2*[-1,-1/sqrt(3),0]); +Putpoint3d("M",(B3d+C3d)/2); +phd=Concatobj([[A,B,C],[A,B,D],[A,C,D],[B,C,D]]); +VertexEdgeFace("1",phd); +Spaceline("1",[A,M,D]); +Nohiddenbyfaces("1","phf3d1"); +Letter3d([A3d,"ne","A",B3d,"w","B",C3d,"se","C",D3d,"e","D"]); +Letter3d(M3d,"sw","M",["Color=blue"]); +\end{verbatim} +\begin{flushright} \hyperlink{functionlist}{$\Rightarrow$関数一覧}\end{flushright} \end{description} -\newpage +\newpage % 付録 ================================== \section{付録} @@ -7424,6 +7779,7 @@ Cinderellaで使っている用語に次のものがある。 \hyperlink{fontsize}{Fontsize(記号)} \>フォントサイズを設定する\\ \hyperlink{ketinit}{Ketinit(options)} \>\ketcindy を初期化する\\ \hyperlink{ptsize}{Ptsize(数)} \>表示する点の大きさを設定する\\ +\hyperlink{setarrow}{Setarrow(size,angle,pos,cut,style} \>矢線の形状を設定する\\ \hyperlink{setax}{Setax(list)} \>座標軸の書式を設定する\\ \hyperlink{setcolor}{Setcolor(color,options)} \>Windispgでの描画色を設定する\\ \hyperlink{setfiles}{Setfiles(filename)} \>出力するファイル名を設定する\\ @@ -7439,6 +7795,7 @@ Cinderellaで使っている用語に次のものがある。 【描画】\\ \hyperlink{addgraph}{AddGraph(name ,プロットデータ)} \>ユーザー定義のプロットデータを描画する\\ \hyperlink{anglemark}{Anglemark(点list, options)} \>角の印を入れる\\ +\hyperlink{setarrow}{Setarrow(options)} \>矢線をスタイルを設定する\\ \hyperlink{arrowdata}{Arrowdata(name.[始点,終点],options)} \>2点間を結ぶ矢線を描く\\ \hyperlink{arrowhead}{Arrowhead(点,方向,options)} \>点に矢じりだけを描く\\ \hyperlink{bezier}{Bezier(name, list,list,options )} \>単独のベジェ曲線を描く\\ @@ -7456,7 +7813,7 @@ Cinderellaで使っている用語に次のものがある。 \hyperlink{drwpt}{Drwpt([点,options])} \>点を表示する\\ \hyperlink{ellipseplot}{Ellipseplot(name,list,str,options)} \>楕円を描く\\ \hyperlink{enclosing}{Enclosing(name , [位置,方向,数式])} \>複数の曲線から閉曲線を描く\\ -\hyperlink{expr}{Expr(文字列)} \>\TeX 数式を書く\\ +\hyperlink{expr}{Expr([座標,位置,文字列],options)} \>\TeX 数式を書く\\ \hyperlink{exprrot}{Exprrot(位置,向き,文字列)} \>傾いた\TeX 数式を書く\\ \hyperlink{fourierseries}{Fourierseries(name,係数,周期,項数)} \>フーリエ級数を描く\\ \hyperlink{framedata}{Framedata(name , list)} \>矩形を描く\\ @@ -7466,8 +7823,8 @@ Cinderellaで使っている用語に次のものがある。 \hyperlink{implicitplot}{Implicitplot(name,str,,str,str,options)} \>陰関数のグラフを描く\\ \hyperlink{invert}{Invert(PD)} \>プロットデータの点を逆順にする(reverseと同じ)\\ \hyperlink{joincrvs}{Joincrvs(name, PDlist, options)} \>2つのプロットデータをつなげたデータを作る\\ -\hyperlink{letter}{Letter(「座標,位置,文字列]のlist」)} \>文字列を表示する\\ -\hyperlink{letterrot}{Letterrot(「座標,方向,移動量,文字列])} \>文字列を回転して表示する\\ +\hyperlink{letter}{Letter([座標,位置,文字列],options)} \>文字列を表示する\\ +\hyperlink{letterrot}{Letterrot(座標,方向,移動量,文字列)} \>文字列を回転して表示する\\ \hyperlink{lineplot}{Lineplot(name,2点のlist,options)} \>2点を結ぶ直線を描く\\ \hyperlink{listplot}{Listplot(name,点のlist,options)} \>点を線分で結ぶ\\ \hyperlink{mkbeziercrv}{Mkbeziercrv(name,list,options)} \>作図した点を使ってベジェ曲線を描く\\ @@ -7516,6 +7873,7 @@ Cinderellaで使っている用語に次のものがある。 \hyperlink{tlistplot}{Tlistplot(セルラベル1,セルラベル2)} \>セルに斜線を引く\\ \vspace{\baselineskip} 【値の取得と入出力】\\ +\hyperlink{asin}{Asin(real),Acos(real) } \>逆三角関数の値を返す\\ \hyperlink{crossprod}{Crossprod(list,list)} \>ベクトルの外積を計算する\\ \hyperlink{derivative}{Derivative(関数式,変数,値)} \>関数の微分係数を求める\\ \hyperlink{dotprod}{Dotprod(list,list)} \>ベクトルの内積を計算する\\ @@ -7536,6 +7894,7 @@ Cinderellaで使っている用語に次のものがある。 \hyperlink{ptcrv}{Ptcrv(n,PD)} \>曲線PD のn 番目の節点を取得する\\ \hyperlink{ptstart}{Ptstart(PD)} \>プロットデータの始点・終点を取得する\\ \hyperlink{readoutdata}{ReadOutData(ファイル名)} \>外部データをPDとして読み込む\\ +\hyperlink{sqr}{Sqr(real)} \>平方根を返す\\ \hyperlink{viewtex}{Viewtex()} \>\TeX のソースファイルを書き出す。引数なし\\ \hyperlink{workprocess}{Workprocess()} \>作図の経過を取得する\\ \hyperlink{writeoutdata}{WriteOutData()} \>PDデータを書き出す\\ @@ -7629,9 +7988,11 @@ Cinderellaで使っている用語に次のものがある。 \hyperlink{drawpoint3d}{Drawpoint3d(座標)} \>空間点を描く\\ \hyperlink{embed}{Embed(name,PD,式)} \>埋め込みデータ作成\\ \hyperlink{execcmdc}{ExeccmdC(name,options1,options2)} \>C言語で命令実行\\ +\hyperlink{expr3d}{Expr3D([座標,位置,文字列],options)} \>文字列を表示する\\ \hyperlink{intersectcrvsf}{Intersectcrvsf(name,PD,式)} \>曲線と曲面の交点を求める\\ \hyperlink{intersectsgpL}{IntersectsgpL(点名,線分,面,描画方法)} \>空間の直線と平面の交点\\ \hyperlink{invparapt}{Invparapt(座標,PD)} \>描画面座標に対応する曲線上の座標\\ +\hyperlink{letter3d}{Letter3D([座標,位置,文字列],options)} \>文字列を表示する\\ \hyperlink{mkbezierptcrv3d}{Mkbezierptcrv3d(点list)} \>制御点を自動的にとる空間ベジェ曲線\\ \hyperlink{nohiddenbyfaces}{Nohiddenbyfaces(name,PD,PD,opt1,opt2)} \>多面体と空間曲線を陰線処理\\ \hyperlink{parapt}{Parapt(座標)} \>点の投影面での座標\\ @@ -7653,6 +8014,7 @@ Cinderellaで使っている用語に次のものがある。 \hyperlink{scalepoint3d}{Scalepoint3d(点, vec, 中心)} \>点の位置を拡大/縮小\\ \hyperlink{sf3data}{Sf3data(name, list,options)} \>陰線処理なしの空間曲面を描く\\ \hyperlink{sfbdparadata}{Sfbdparadata(name, 式,options)} \>曲面を陰線処理して描く\\ +\hyperlink{sfcutparadatacdy}{Sfcutparadatacdy(name,面,曲面,options)} \>平面と曲面の交線を求める。\\ \hyperlink{skeletonparadata}{Skeletonparadata(name,PD,PD,options)} \>スケルトン処理のデータ作成\\ \hyperlink{spacecurve}{Spacecurve(name, 式, 定義域,options)} \>空間曲線のデータ作成\\ \hyperlink{spaceline}{Spaceline(name,list)} \>空間の折線データ作成\\ diff --git a/Master/texmf-dist/doc/support/ketcindy/source/readme/ReadmeLinuxE.tex b/Master/texmf-dist/doc/support/ketcindy/source/readme/ReadmeLinuxE.tex new file mode 100644 index 00000000000..f567a0a9072 --- /dev/null +++ b/Master/texmf-dist/doc/support/ketcindy/source/readme/ReadmeLinuxE.tex @@ -0,0 +1,109 @@ +\documentclass{article} +\usepackage{ketpic,ketlayer} +\usepackage{amsmath,amssymb} +\usepackage{graphicx} +\usepackage{xcolor} +\usepackage{bm,enumerate} +\usepackage[colorlinks=true,urlcolor=blue]{hyperref} + +\setmargin{20}{20}{20}{20} + +\renewcommand{\labelitemi}{$\cdot$} +\renewcommand{\labelitemii}{$\cdot$} + +\begin{document} + +\begin{center} +How to install KeTCindy(Mac) +\end{center} + +\hfill modified\ :\ \today + +\begin{enumerate}[\bf\large 1.] + +\item Install Cinderella, R and Maxima. + \begin{itemize} + \item \url{https://beta.cinderella.de} (Cinderella) + \item \url{https://cran.r-project.org} (R) + \item \url{https://sourceforge.net/projects/maxima/files} (Maxima) + \end{itemize} + +\item Install TeX if any TeX has not been installed. + \begin{enumerate}[(1)] + \item TeXLive is recommended. + \begin{itemize} + \item Files necessary for KeTCindy are already implemented (2018 or later). + \end{itemize} + \item In case of other TeX, see {\bf 3.}(2). + \end{enumerate} + + +\item Install KeTCdindy + \begin{enumerate}[(1)] + \item Download ketcindy from CTAN(\url{https://ctan.org})\\ + \hspace*{10mm}Search ketcindy \verb|>| Package ketcindy \verb|>| download + \begin{itemize} + \item[Rem)]The latest version can be download from Repository:\\ + \hspace*{5mm}\url{https://github.com/ketpic/ketcindy}\\ + \hspace*{10mm}Clone or Download \verb|>| Download ZIP + \end{itemize} + \item Open ketcindy(-master)/forLinux. + \begin{itemize} + \item[Rem)]If you use TeX other than TeXLIve/KeTTeX, + \begin{itemize} + \item Open setketcindy.command with a text editor. + \item Edit paths in it. + \end{itemize} + \end{itemize} + \item Open Terminal and execute setketcindy.sh with sh command + \begin{itemize} + \item Control-click and select Terminal if necessary. + \item Contents of scripts will be copied into TeX. + \item ketcindystyle files will be copied and mktexlsr will be executed. + \item In Cinderella/PlugIns\\ + \hspace*{5mm}KetcindyPluign.jar will be copied.\\ + \hspace*{5mm}ketcindy.ini will be generated . + \end{itemize} + \item Open Terminal and execute setwork.sh with sh command. + \begin{itemize} + \item[Rem)]Control-click and select Terminal if necessary. + \end{itemize} + \begin{itemize} + \item Work directory "ketcindy" will be generated in User's home. + \item TeX(typeset) will be usually latex,xelatex or pdflatex. + \item Contents of “work” will be copied into "ketcindy" + \item \verb|.ketcindy.conf| will be also generated in User's home.\\ + \hspace*{10mm}You can change the setting of PasthT, Mackc, etc. + \item Template of "ketcindy.conf" will be also copied to work directory. + \item Configuration files are read in order of + \begin{enumerate}[1)] + \item ketoutset.txt + \item ketcindy.conf in User's home + \item ketcindy.conf in the work folder. + \end{enumerate} + \end{itemize} + \end{enumerate} + +\item Test run of KeTCindy + \begin{enumerate}[(1)] + \item Double-click "template1basic.cdy" in "ketcindy/ketfiles".\\ + \hspace*{10mm}Then a frame in white appear on the screen. \end{enumerate} + \item Press "Figure" button at the top left, then the final PDF output is displayed. + \begin{itemize} + \item[Rem)]To close the window of Terminal when the process exits : + \begin{itemize} + \item Start \verb|Terminal|.\\ + \hspace*{10mm}Preferences \verb|>| Shell \verb|>| "Colse if the shell exited clearly" + \end{itemize} + \end{itemize} + +\item Set Texworks if necessary. + \begin{itemize} + \item Downloadable from \url{https://github.com/TeXworks/texworks/releases/}. + \end{itemize} + +\item Install \verb|gcc| for drawings of surface. + +\end{enumerate} + +\end{document}
\ No newline at end of file diff --git a/Master/texmf-dist/doc/support/ketcindy/source/readme/ReadmeLinuxJ.tex b/Master/texmf-dist/doc/support/ketcindy/source/readme/ReadmeLinuxJ.tex new file mode 100644 index 00000000000..69784439e61 --- /dev/null +++ b/Master/texmf-dist/doc/support/ketcindy/source/readme/ReadmeLinuxJ.tex @@ -0,0 +1,107 @@ +\documentclass{ujarticle} +\usepackage{ketpic,ketlayer} +\usepackage{amsmath,amssymb} +\usepackage{graphicx} +\usepackage{xcolor} +\usepackage{bm,enumerate} +\usepackage[dvipdfmx,colorlinks=true,urlcolor=blue]{hyperref} + +\setmargin{20}{20}{20}{20} + +\西暦 + +\renewcommand{\labelitemi}{・} +\renewcommand{\labelitemii}{・} + +\begin{document} + +\begin{center} +KETCindyのインストール (Linux) +\end{center} + +\hfill 修正日:\today + +\begin{enumerate}[\bf\large 1.] +\item Cinderella, R, Maxima をインストールする. + \begin{itemize} + \item \url{https://beta.cinderella.de} (Cinderella) + \item \url{https://cran.r-project.org} (R) + \item \url{https://sourceforge.net/projects/maxima/files} (Maxima) + \end{itemize} + +\item TeXをインストールしていない場合はインストールする. + \begin{enumerate}[(1)] + \item TeXLiveを推奨 + \begin{itemize} + \item 2018以降ではketcindyが既に入っている. + \end{itemize} + \item 他のTeXの場合は,{\bf 3.}(2)を参照する. + \end{enumerate} + +\item KeTCindyのインストール + \begin{enumerate}[(1)] + \item ketcindyをCTAN(\url{https://ctan.org})からダウンロードする.\\ + \hspace*{10mm}ketcindyで検索 \verb|>| Package ketcindy \verb|>| download + \begin{itemize} + \item[注)]最新版は,Repositoryのサイト\\ + \hspace*{10mm}\url{https://github.com/ketpic/ketcindy}\\ + から以下のようにダウンロードできる.\\ + \hspace*{10mm}Clone or download \verb|>| Download ZIP + \item[注)]この場合は,ketcindy-masterになる. + \end{itemize} + \item ketcindy(-master)/forLinuxを開く. + \begin{itemize} + \item[注)]他のTeXを使っている場合 + \begin{itemize} + \item setketcindy.shをテキストエディタで開く. + \item パスを修正する. + \end{itemize} + \end{itemize} + \item ターミナルのshコマンドでsetketcindy.shを実行. + \begin{itemize} + \item scriptsの中身がTeXにコピーされる + \item ketcindyのstyleファイルがTeXにコピーされmktexlsrが実行される. + \item CinderellaのPluginsにKetcindyPlugin.jarをコピー,ketcindy.iniが作成される. + \end{itemize} + \item ターミナルのshコマンドでsetwork.shを実行. + \begin{itemize} + \item 作業ディレクトリketcindyがユーザホームに作成される. + \item タイプセットの方法(TeXの種類)\\ + \hspace*{10mm}通常は,platex (p)またはuplatex(u)を選ぶ. + \item ketcindyフォルダにworkフォルダの中身がコピーされる. + \item \verb|.ketcindy.conf|(不可視ファイルだが編集可能)がユーザホームに作成される.\\ + \hspace*{10mm}注)TeXを切り替えるときなどはこのファイルを修正する. + \item マニュアルもコピーされる. + \item 作業ディレクトリにketincy.confの雛形がコピーされる. + \item KeTCindyを立ち上げたとき,設定ファイルは次の順に読み込まれる. + \begin{enumerate}[1)] + \item ketoutset.txt + \item ユーザホームの\verb|.ketcindy.conf| + \item 作業ディレクトリketcindyの ketcindy.conf + \end{enumerate} + \end{itemize} + \end{enumerate} + \item KeTCindyのテストラン + \begin{enumerate}[(1)] + \item 作業ディレクトリketcindyを開く. + \item ketcindyの中のtemplate1basic.cdyを選び,「情報を見る」を開く. + \begin{itemize} + \item アプリケーションが所定のCinderella2になっていることを確かめる. + \item「情報」を閉じて,template1basic.cdyをダブルクリックする. + \item 画面に白い枠が出れば,ライブラリの読み込みは成功. + \end{itemize} + \item スクリーンの左上部にあるFigureボタンを押して,PDFが表示されれば成功. + \end{enumerate} + +\item TeXworksを設定する. + \begin{itemize} + \item \url{https://github.com/TeXworks/texworks/releases/} からダウンロードできる. + \end{itemize} + +\item gccのインストール + \begin{itemize} + \item 曲面描画のためには, gccが必要である. + \end{itemize} +\end{enumerate} + +\end{document}
\ No newline at end of file diff --git a/Master/texmf-dist/doc/support/ketcindy/source/readme/ReadmeMacE.tex b/Master/texmf-dist/doc/support/ketcindy/source/readme/ReadmeMacE.tex new file mode 100644 index 00000000000..880f70d9e54 --- /dev/null +++ b/Master/texmf-dist/doc/support/ketcindy/source/readme/ReadmeMacE.tex @@ -0,0 +1,126 @@ +\documentclass{article} +\usepackage{ketpic,ketlayer} +\usepackage{amsmath,amssymb} +\usepackage{graphicx} +\usepackage{xcolor} +\usepackage{bm,enumerate} +\usepackage[colorlinks=true,urlcolor=blue]{hyperref} + +\setmargin{20}{20}{20}{20} + +\renewcommand{\labelitemi}{$\cdot$} +\renewcommand{\labelitemii}{$\cdot$} + +\begin{document} + +\begin{center} +How to install KeTCindy(Mac) +\end{center} + +\hfill modified\ :\ \today + +\begin{enumerate}[\bf\large 1.] + +\item Install Cinderella, R and Maxima. + \begin{itemize} + \item \url{https://beta.cinderella.de} (Cinderella) + \item \url{https://cran.r-project.org} (R) + \item \url{https://sourceforge.net/projects/maxima/files} (Maxima) + \end{itemize} +\hspace*{5mm}Rem) Check they start correctly. + +\item Install TeX if any TeX has not been installed. + \begin{enumerate}[(1)] + \item TeXLive is recommended. + \begin{itemize} + \item Files necessary for KeTCindy are already implemented (2018 or later). + \end{itemize} + \item kettex is a light-weight TeXLive. + \begin{itemize} + \item Download kettex.zip from\\ + \hspace*{10mm}\url{https://www.dropbox.com/s/dc4inuk06t07g26/kettex.dmg?dl=0} + \item Double-click it and move kettex to \verb|/Applications|. + \end{itemize} + \item In case of other TeX, see {\bf 3.}(2). + \end{enumerate} + + +\item Install KeTCdindy + \begin{enumerate}[(1)] + \item Download ketcindy from CTAN(\url{https://ctan.org})\\ + \hspace*{10mm}Search ketcindy \verb|>| Package ketcindy \verb|>| download + \begin{itemize} + \item[Rem)]The latest version can be download from Repository:\\ + \hspace*{5mm}\url{https://github.com/ketpic/ketcindy}\\ + \hspace*{10mm}Clone or Download \verb|>| Download ZIP + \end{itemize} + \item Open ketcindy(-master)/forMac. + \begin{itemize} + \item[Rem)]If you use TeX other than TeXLIve/KeTTeX, + \begin{itemize} + \item Open setketcindy.command with a text editor. + \item Edit paths in it. + \end{itemize} + \end{itemize} + \item Double-click setketcindy.command. + \begin{itemize} + \item Password of an administrator is required. + \item Control-click and select Terminal if necessary. + \item Contents of scripts will be copied into TeX. + \item ketcindystyle files will be copied and mktexlsr will be executed. + \item In Cinderella/PlugIns\\ + \hspace*{5mm}KetcindyPluign.jar will be copied.\\ + \hspace*{5mm}ketcindy.ini will be generated . + \end{itemize} + \item Double-click setwork.command. + \begin{itemize} + \item[Rem)]Control-click and select Terminal if necessary. + \end{itemize} + \begin{itemize} + \item Work directory "ketcindy" will be generated in User's home. + \item TeX(typeset) will be usually latex,xelatex or pdflatex. + \item Contents of “work” will be copied into "ketcindy" + \item \verb|.ketcindy.conf| will be also generated in User's home.\\ + \hspace*{10mm}You can change the setting of PasthT, Mackc, etc. + \item Template of "ketcindy.conf" will be also copied to work directory. + \item Configuration files are read in order of + \begin{enumerate}[1)] + \item ketoutset.txt + \item ketcindy.conf in User's home + \item ketcindy.conf in the work folder. + \end{enumerate} + \end{itemize} + \end{enumerate} + +\item Test run of KeTCindy + \begin{enumerate}[(1)] + \item Double-click "template1basic.cdy" in "ketcindy/ketfiles".\\ + \hspace*{10mm}Then a frame in white appear on the screen. \end{enumerate} + \item Press "Figure" button at the top left, then the final PDF output is displayed. + \begin{itemize} + \item[Rem)]To close the window of Terminal when the process exits : + \begin{itemize} + \item Start \verb|Terminal|.\\ + \hspace*{10mm}Preferences \verb|>| Shell \verb|>| "Colse if the shell exited clearly" + \end{itemize} + \end{itemize} + +\item Set Texworks if necessary. For example, in case of KeTTeX, + \begin{itemize} + \item Downloadable from \url{https://github.com/TeXworks/texworks/releases/}. + \item Launch TeXworks,\\ + \hspace*{10mm}and choose Edit \verb|>| Preference \verb|>| Typeset. + \item Push upper + and add\\ + \hspace*{5mm}\verb|/Applications/kettex/texlive/bin/x86_64-darwin| + \item Select Xelatex or pdflatex. + \end{itemize} + +\item Install Xcode if you use gcc for drawings of surface. + \begin{itemize} + \item[Rem)]f you want to use only gcc, execute on Terminal:\\ + \hspace*{10mm}\verb|sudo xcode-select —install| + \end{itemize} + +\end{enumerate} + +\end{document}
\ No newline at end of file diff --git a/Master/texmf-dist/doc/support/ketcindy/source/readme/ReadmeMacJ.tex b/Master/texmf-dist/doc/support/ketcindy/source/readme/ReadmeMacJ.tex new file mode 100644 index 00000000000..cb61f9be12a --- /dev/null +++ b/Master/texmf-dist/doc/support/ketcindy/source/readme/ReadmeMacJ.tex @@ -0,0 +1,149 @@ +\documentclass{ujarticle} +\usepackage{ketpic,ketlayer} +\usepackage{amsmath,amssymb} +\usepackage{graphicx} +\usepackage{xcolor} +\usepackage{bm,enumerate} +\usepackage[dvipdfmx,colorlinks=true,urlcolor=blue]{hyperref} + +\setmargin{20}{20}{20}{20} + +\西暦 + +\renewcommand{\labelitemi}{・} +\renewcommand{\labelitemii}{・} + +\begin{document} + +\begin{center} +KETCindyのインストール (Mac) +\end{center} + +\hfill 修正日:\today + +\begin{enumerate}[\bf\large 1.] +\item Cinderella, R, Maxima をインストールする. + \begin{itemize} + \item \url{https://beta.cinderella.de} (Cinderella) + \item \url{https://cran.r-project.org} (R) + \item \url{https://sourceforge.net/projects/maxima/files} (Maxima) + \end{itemize} + 注) ダブルクリックして,起動するかを確認する. + +\item TeXをインストールしていない場合はインストールする. + \begin{enumerate}[(1)] + \item TeXLiveを推奨 + \begin{itemize} + \item 2018以降ではketcindyが既に入っている. + \end{itemize} + \item KeTTeXはTeXLiveの軽量版 + \begin{itemize} + \item kettex.dmgを以下からダウンロードできる.\\ + \hspace*{10mm}\url{https://www.dropbox.com/s/dc4inuk06t07g26/kettex.dmg?dl=0} + \item ダブルクリックしてできるkettexを\verb|/Applications|に入れる. + \end{itemize} + \item 他のTeXの場合は,{\bf 3.}(2)を参照する. + \end{enumerate} + +\item KeTCindyのインストール + \begin{enumerate}[(1)] + \item ketcindyをCTAN(\url{https://ctan.org})からダウンロードする.\\ + \hspace*{10mm}ketcindyで検索 \verb|>| Package ketcindy \verb|>| download + \begin{itemize} + \item[注)]最新版は,Repositoryのサイト\\ + \hspace*{10mm}\url{https://github.com/ketpic/ketcindy}\\ + から以下のようにダウンロードできる.\\ + \hspace*{10mm}Clone or download \verb|>| Download ZIP + \item[注)]この場合は,ketcindy-masterになる. + \end{itemize} + \item ketcindy(-master)/forMacを開く. + \begin{itemize} + \item[注)]他のTeXを使っている場合 + \begin{itemize} + \item setketcindy.commandをテキストエディタで開く. + \item パスを修正する. + \end{itemize} + \end{itemize} + \item setketcindy.commandをダブルクリック + \begin{itemize} + \item[注)]管理者権限が必要となる. + \item[注)]開かないときはControl+クリックでターミナルを選ぶ. + \end{itemize} + \begin{itemize} + \item scriptsの中身がTeXにコピーされる + \item ketcindyのstyleファイルがTeXにコピーされmktexlsrが実行される. + \item CinderellaのPluginsにKetcindyPlugin.jarをコピー,ketcindy.iniが作成される. + \end{itemize} + \item setwork.commandをダブルクリック + \begin{itemize} + \item[注)]開かないときはControl+クリックでターミナルを選ぶ. + \end{itemize} + \begin{itemize} + \item 作業ディレクトリketcindyがユーザホームに作成される. + \item タイプセットの方法(TeXの種類)\\ + \hspace*{10mm}通常は,platex (p)またはuplatex(u)を選ぶ. + \item ketcindyフォルダにworkフォルダの中身がコピーされる. + \item \verb|.ketcindy.conf|(不可視ファイルだが編集可能)がユーザホームに作成される.\\ + \hspace*{10mm}注)TeXを切り替えるときなどはこのファイルを修正する. + \item マニュアルもコピーされる. + \item 作業ディレクトリにketincy.confの雛形がコピーされる. + \item KeTCindyを立ち上げたとき,設定ファイルは次の順に読み込まれる. + \begin{enumerate}[1)] + \item ketoutset.txt + \item ユーザホームの\verb|.ketcindy.conf| + \item 作業ディレクトリketcindyの ketcindy.conf + \end{enumerate} + \end{itemize} + \end{enumerate} + \item KeTCindyのテストラン + \begin{enumerate}[(1)] + \item 作業ディレクトリketcindyを開く. + \item ketcindyの中のtemplate1basic.cdyを選び,「情報を見る」を開く. + \begin{itemize} + \item アプリケーションが所定のCinderella2になっていることを確かめる. + \item「情報」を閉じて,template1basic.cdyをダブルクリックする. + \item 画面に白い枠が出れば,ライブラリの読み込みは成功. + \end{itemize} + \item スクリーンの左上部にあるFigureボタンを押して,PDFが表示されれば成功. + \begin{itemize} + \item[注)]PDFの表示後,ターミナル画面を閉じるようにするには + \begin{itemize} + \item アプリケーション \verb|/| ユーティリティ \verb|/| ターミナルを開く + \item トップメニューから\\ + \hspace*{5mm}ターミナル>環境設定 \verb|>|(プロファイル)\verb|>| シェル\\ + \hspace*{10mm}「シェルが正常に終了した場合閉じる」を選択 + \end{itemize} + \end{itemize} + \end{enumerate} + +\item TeXworksの設定(kettexの場合) + \begin{itemize} + \item \url{https://github.com/TeXworks/texworks/releases/} からダウンロードできる. + \item TeXworksを立ち上げる + \item TeXworks \verb|>| 環境設定 \verb|>| タイプセット + \item 上の欄(パス)に以下を追加\\ + \hspace*{5mm}\verb|/Applications/kettex/texlive/bin/x86_64-darwin|\\ + \hspace*{10mm}注) 上の行を上の欄の先頭になるように移動する. + \item 下の欄の横にある + をクリック + \begin{itemize} + \item 名前:uplatex(ptex2pdf)またはplatex(ptex2pdf) + \item プログラム : ptex2pdf + \item 引数:\\ + \hspace*{10mm} \verb|-u|(uplatexの場合のみ)\\ + \hspace*{10mm} \verb|-l|\\ + \hspace*{10mm} \verb|-ot|\\ + \hspace*{10mm} \verb|$synctexoption|\\ + \hspace*{10mm} \verb|$fullname| + \item[]OKボタンを押し,デフォルトを変更してOKボタンを押す. + \end{itemize} + \end{itemize} +\item gccのインストール + \begin{itemize} + \item 曲面描画のためには, gccが必要である. + \item Xcodeがインストールされていなければ,インストールする.\\ + \hspace*{5mm}注) ターミナルで次を実行すれば,gccだけがインストールされる.\\ + \hspace*{20mm}\verb|sudo xcode-select —install| + \end{itemize} +\end{enumerate} + +\end{document}
\ No newline at end of file diff --git a/Master/texmf-dist/doc/support/ketcindy/source/readme/ReadmeWinE.tex b/Master/texmf-dist/doc/support/ketcindy/source/readme/ReadmeWinE.tex new file mode 100644 index 00000000000..60847ef8e23 --- /dev/null +++ b/Master/texmf-dist/doc/support/ketcindy/source/readme/ReadmeWinE.tex @@ -0,0 +1,130 @@ +\documentclass{article} +\usepackage{ketpic,ketlayer} +\usepackage{amsmath,amssymb} +\usepackage{graphicx} +\usepackage{xcolor} +\usepackage{bm,enumerate} +\usepackage[colorlinks=true,urlcolor=blue]{hyperref} + +\setmargin{20}{20}{20}{20} + +\renewcommand{\labelitemi}{$\cdot$} +\renewcommand{\labelitemii}{$\cdot$} + +\begin{document} + +\begin{center} +How to install KeTCindy(Windows) +\end{center} + +\hfill modified\ :\ \today + +\begin{enumerate}[\bf\large 1.] + +\item Install Cinderella, R and Maxima. + \begin{itemize} + \item \url{https://beta.cinderella.de} (Cinderella) + \item \url{https://cran.r-project.org} (R) + \item \url{https://sourceforge.net/projects/maxima/files} (Maxima) + \item \url{https://www.sumatrapdfreader.org/download-free-pdf-viewer.html} (Sumatra) + \end{itemize} +\hspace*{5mm}Rem) Check they start correctly. + +\item Install TeX if any TeX has not been installed. + \begin{enumerate}[(1)] + \item TeXLive is recommended. + \begin{itemize} + \item Files necessary for KeTCindy are already implemented (2018 or later). + \end{itemize} + \item kettex is a light-weight TeXLive. + \begin{itemize} + \item Download kettex.zip from\\ + \hspace*{10mm}\url{https://www.dropbox.com/s/dc4inuk06t07g26/kettex.dmg?dl=0} + \item Double-click it and move kettex to \verb|/Applications|. + \end{itemize} + \item In case of other TeX, see {\bf 3.}(2). + \end{enumerate} + + +\item Install KeTCdindy + \begin{enumerate}[(1)] + \item Download ketcindy from CTAN(\url{https://ctan.org})\\ + \hspace*{10mm}Search ketcindy \verb|>| Package ketcindy \verb|>| download + \begin{itemize} + \item[Rem)]The latest version can be download from Repository:\\ + \hspace*{5mm}\url{https://github.com/ketpic/ketcindy}\\ + \hspace*{10mm}Clone or Download \verb|>| Download ZIP + \end{itemize} + \item Open ketcindy(-master)/forWindows. + \begin{itemize} + \item[Rem)]If you use TeX other than TeXLIve/KeTTeX, + \begin{itemize} + \item Open setketcindy.bat with a text editor. + \item Edit paths in it. + \end{itemize} + \end{itemize} + \item Right click the following batch file setketcindy.bat and select "Run as adiministrator".\\ + \hspace*{10mm}\Ltab{15mm}{KeTTeX} setketcindy.bat\\ + \hspace*{10mm}\Ltab{15mm}{TeXLive} setketcindytexlive.bat\\ + \hspace*{10mm}\Ltab{15mm}{Others} edited setketcindy.bat + \begin{itemize} + \item Contents of scripts will be copied into TeX. + \item ketcindystyle files will be copied and mktexlsr will be executed. + \item In Cinderella/PlugIns\\ + \hspace*{5mm}KetcindyPluign.jar will be copied.\\ + \hspace*{5mm}ketcindy.ini will be generated . + \end{itemize} + \item Double-click setwork.bat. + \begin{itemize} + \item[Rem)]Control-click and select Terminal if necessary. + \end{itemize} + \begin{itemize} + \item Work directory "ketcindy" will be generated in User's home. + \item TeX(typeset) will be usually latex,xelatex or pdflatex. + \item Contents of “work” will be copied into "ketcindy" + \item \verb|.ketcindy.conf| will be also generated in User's home.\\ + \hspace*{10mm}You can change the setting of PasthT, Mackc, etc. + \item Template of "ketcindy.conf" will be also copied to work directory. + \item Configuration files are read in order of + \begin{enumerate}[1)] + \item ketoutset.txt + \item ketcindy.conf in User's home + \item ketcindy.conf in the work folder. + \end{enumerate} + \end{itemize} + \end{enumerate} + +\item Test run of KeTCindy + \begin{enumerate}[(1)] + \item Double-click "template1basic.cdy" in "ketcindy/ketfiles".\\ + \hspace*{10mm}Then a frame in white appear on the screen. \end{enumerate} + \item Press "Figure" button at the top left, then the final PDF output is displayed. + \begin{itemize} + \item[Rem)]To close the window of Terminal when the process exits : + \begin{itemize} + \item Start \verb|Terminal|.\\ + \hspace*{10mm}Preferences > Shell \verb|>| "Colse if the shell exited clearly" + \end{itemize} + \end{itemize} + +\item Set Texworks if necessary. For example, in case of KeTTeX, + \begin{itemize} + \item Downloadable from \url{https://github.com/TeXworks/texworks/releases/}. + \item Launch TeXworks,\\ + \hspace*{10mm}and choose Edit \verb|>| Preference \verb|>| Typeset. + \item Push upper + and add\\ + \hspace*{5mm}\verb|/Applications/kettex/texlive/bin/x86_64-darwin| + \item Select Xelatex or pdflatex. + \end{itemize} + +\item Install gcc for surface drawing. + \begin{itemize} + \item Go to minGW(\url{http://www.mingw.org}). + \item Download\\ + \hspace*{10mm}download \verb|>| Install \verb|>| mingw-get-setup.exe + \item Only \verb|mingw32-base, mingw32-gcc-g++| are needed. + \end{itemize} + +\end{enumerate} + +\end{document}
\ No newline at end of file diff --git a/Master/texmf-dist/doc/support/ketcindy/source/readme/ReadmeWinJ.tex b/Master/texmf-dist/doc/support/ketcindy/source/readme/ReadmeWinJ.tex new file mode 100644 index 00000000000..fbc0137c232 --- /dev/null +++ b/Master/texmf-dist/doc/support/ketcindy/source/readme/ReadmeWinJ.tex @@ -0,0 +1,148 @@ +\documentclass{ujarticle} +\usepackage{ketpic,ketlayer} +\usepackage{amsmath,amssymb} +\usepackage{graphicx} +\usepackage{xcolor} +\usepackage{bm,enumerate} +\usepackage[dvipdfmx,colorlinks=true,urlcolor=blue]{hyperref} + +\setmargin{20}{20}{20}{20} + +\西暦 + +\renewcommand{\labelitemi}{・} +\renewcommand{\labelitemii}{・} + +\begin{document} + +\begin{center} +KETCindyのインストール (Windows) +\end{center} + +\hfill 修正日:\today + +\begin{enumerate}[\bf\large 1.] +\item Cinderella, R, Maxima をインストールする. + \begin{itemize} + \item \url{https://beta.cinderella.de} (Cinderella) + \item \url{https://cran.r-project.org} (R) + \item \url{https://sourceforge.net/projects/maxima/files} (Maxima) + \item \url{https://www.sumatrapdfreader.org/download-free-pdf-viewer.html} (Sumatra)\\ \hspace*{10mm}注)SumatraはWindowsだけである. + \end{itemize} + 注) ダブルクリックして,起動するかを確認する. + +\item TeXをインストールしていない場合はインストールする. + \begin{enumerate}[(1)] + \item TeXLiveを推奨 + \begin{itemize} + \item 2018以降ではketcindyが既に入っている. + \end{itemize} + \item KeTTeXはTeXLiveの軽量版 + \begin{itemize} + \item kettex.dmgを以下からダウンロードできる.\\ + \hspace*{10mm}\url{https://www.dropbox.com/s/fthw4btjqqs33tc/kettex.exe?dl=0} + \item ダブルクリックしてできるkettexを\verb|C:\|に入れる. + \end{itemize} + \item 他のTeXの場合は,{\bf 3.}(2)を参照する. + \end{enumerate} + +\item KeTCindyのインストール + \begin{enumerate}[(1)] + \item ketcindyをCTAN(\url{https://ctan.org})からダウンロードする.\\ + \hspace*{10mm}ketcindyで検索 \verb|>| Package ketcindy \verb|>| download + \begin{itemize} + \item[注)]最新版は,Repositoryのサイト\\ + \hspace*{10mm}\url{https://github.com/ketpic/ketcindy}\\ + から以下のようにダウンロードできる.\\ + \hspace*{10mm}Clone or download \verb|>| Download ZIP + \item[注)]この場合は,ketcindy-masterになる. + \end{itemize} + \item ketcindy(-master)/forWindowsを開く. + \begin{itemize} + \item[注)]他のTeX(TeXLive,W32tex以外)を使っている場合 + \begin{itemize} + \item setketcindy.bat をテキストエディタで開く. + \item パスを修正する. + \end{itemize} + \end{itemize} + \item 次のバッチファイルを右クリック「管理者として実行」を選ぶ.\\ + \hspace*{3zw}\Ltab{5zw}{KeTTeX} setketcindy.bat\\ + \hspace*{3zw}\Ltab{5zw}{TeXLive} setketcindytexlive.bat\\ + \hspace*{3zw}\Ltab{5zw}{W32TeX} setketcindyw32J.bat\\ + \hspace*{3zw}\Ltab{5zw}{他のTeX} setketcindy.bat(要修正) + \begin{itemize} + \item scriptsの中身がTeXにコピーされる + \item ketcindyのstyleファイルがTeXにコピーされmktexlsrが実行される. + \item CinderellaのPluginsにKetcindyPlugin.jarをコピー,ketcindy.iniが作成される. + \end{itemize} + \item setwork.batをダブルクリック + \begin{itemize} + \item 作業ディレクトリketcindyがユーザホームに作成される. + \item タイプセットの方法(TeXの種類)\\ + \hspace*{10mm}通常は,platex (p)またはuplatex(u)を選ぶ. + \item ketcindyフォルダにworkフォルダの中身がコピーされる. + \item \verb|.ketcindy.conf|(不可視ファイルだが編集可能)がユーザホームに作成される.\\ + \hspace*{10mm}注)TeXを切り替えるときなどはこのファイルを修正する. + \item マニュアルもコピーされる. + \item 作業ディレクトリにketincy.confの雛形がコピーされる. + \item KeTCindyを立ち上げたとき,設定ファイルは次の順に読み込まれる. + \begin{enumerate}[1)] + \item ketoutset.txt + \item ユーザホームの\verb|.ketcindy.conf| + \item 作業ディレクトリketcindyの ketcindy.conf + \end{enumerate} + \end{itemize} + \end{enumerate} + \item KeTCindyのテストラン + \begin{enumerate}[(1)] + \item 作業ディレクトリketcindyを開く. + \item ketcindyの中のtemplate1basic.cdyを選び,「情報を見る」を開く. + \begin{itemize} + \item アプリケーションが所定のCinderella2になっていることを確かめる. + \item「情報」を閉じて,template1basic.cdyをダブルクリックする. + \item 画面に白い枠が出れば,ライブラリの読み込みは成功. + \end{itemize} + \item スクリーンの左上部にあるFigureボタンを押して,PDFが表示されれば成功. + \begin{itemize} + \item[注)]PDFの表示後,ターミナル画面を閉じるようにするには + \begin{itemize} + \item アプリケーション \verb|/| ユーティリティ \verb|/| ターミナルを開く + \item トップメニューから\\ + \hspace*{5mm}ターミナル>環境設定 \verb|>|(プロファイル)\verb|>| シェル\\ + \hspace*{10mm}「シェルが正常に終了した場合閉じる」を選択 + \end{itemize} + \end{itemize} + \end{enumerate} + +\item TeXworksの設定(kettexの場合) + \begin{itemize} + \item \url{https://github.com/TeXworks/texworks/releases/} からダウンロードできる. + \item TeXworksを立ち上げる + \item TeXworks \verb|>| 環境設定 \verb|>| タイプセット + \item 上の欄(パス)に以下を追加\\ + \hspace*{5mm}\verb|/Applications/kettex/texlive/bin/x86_64-darwin|\\ + \hspace*{10mm}注) 上の行を上の欄の先頭になるように移動する. + \item 下の欄の横にある + をクリック + \begin{itemize} + \item 名前:uplatex(ptex2pdf)またはplatex(ptex2pdf) + \item プログラム : ptex2pdf + \item 引数:\\ + \hspace*{10mm} \verb|-u|(uplatexの場合のみ)\\ + \hspace*{10mm} \verb|-l|\\ + \hspace*{10mm} \verb|-ot|\\ + \hspace*{10mm} \verb|$synctexoption|\\ + \hspace*{10mm} \verb|$fullname| + \item[]OKボタンを押し,デフォルトを変更してOKボタンを押す. + \end{itemize} + \end{itemize} +\item gccのインストール + \begin{itemize} + \item 曲面描画のためには, gccが必要である. + \item minGWのホームページ\url{http://www.mingw.org}から\\ + \hspace*{10mm}download \verb|>| Install \verb|>| mingw-get-setup.exe\\ + をダウンロードして実行\\ + \hspace*{10mm}注) パッケージは,mingw32-base, mingw32-gcc-g++だけでよい. + \end{itemize} +\end{enumerate} + +\end{document}
\ No newline at end of file diff --git a/Master/texmf-dist/scripts/ketcindy/ketjava/KetCindyPlugin.jar b/Master/texmf-dist/scripts/ketcindy/ketjava/KetCindyPlugin.jar Binary files differindex da263da5cfb..b985d61540f 100644 --- a/Master/texmf-dist/scripts/ketcindy/ketjava/KetCindyPlugin.jar +++ b/Master/texmf-dist/scripts/ketcindy/ketjava/KetCindyPlugin.jar diff --git a/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylib3dlogr.txt b/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylib3dlogr.txt index d793d2fb12d..9b60514ba5d 100644 --- a/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylib3dlogr.txt +++ b/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylib3dlogr.txt @@ -1,3 +1,7 @@ +// 20181218 +// Letter3d,Expr3d added +// 20181212 +// Vertexedgeface debugged ( Vname changed for multi 3d ) // 20181108 // Mkpointlist debugged (theta=90) // 20181107 diff --git a/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylib3dr.cs b/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylib3dr.cs index dabd701c181..7f378e9cd87 100644 --- a/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylib3dr.cs +++ b/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylib3dr.cs @@ -14,7 +14,7 @@ // along with this program. If not, see <http://www.gnu.org/licenses/> // -println("ketcindylib3d(20181108) loaded"); +println("ketcindylib3d(20181218) loaded"); //help:start(); @@ -2104,7 +2104,7 @@ Putpoint3d(Arg1,Arg2,Arg3):=( ////%Fixpoint3d start//// Fixpoint3d(ptlist):=( -// help:Fixpoint3d(["O",[0,0,0],"X",[1,0,0]]); +// help:Fixpoint3d(["O",[0,0,0],"X",[1,0,0]]); regional(name,pt3,pt2,tmp,tmp1,tmp2); forall(1..(length(ptlist)/2), name=ptlist_(2*#-1); @@ -2123,6 +2123,54 @@ Fixpoint3d(ptlist):=( ); ////%Fixpoint3d end//// +////%Letter3d start//// +Letter3d(dtlist):=Letter3d(dtlist,[]); //181218from +Letter3d(pt3d,dir,name):=Letter3d([pt3d,dir,name],[]); +Letter3d(pt3d,dir,name,options):=Letter3d([pt3d,dir,name],options); +Letter3d(dtlist,options):=( +//help:Letter3d(point3d,,direction,name); +//help:Letter3d([point3d,,direction,name],options]); + regional(dt,nall,jj); + dt=dtlist; + if(mod(length(dt),3)!=0, + println(" Improper data"); + , + nall=length(dt)/3; + forall(1..nall, + jj=#*3-2; + tmp=dt_jj; + if(ispoint(tmp),tmp=parse(text(tmp)+"3d")); + dt_jj=Parapt(tmp); + ); + Letter(dt,options); + ); +); //181218to +////%Letter3d end//// + +////%Expr3d start//// +Expr3d(dtlist):=Expr3d(dtlist,[]); //181218from +Expr3d(pt3d,dir,name):=Expr3d([pt3d,dir,name],[]); //181218from +Expr3d(pt3d,dir,name,options):=Expr3d([pt3d,dir,name],options); +Expr3d(dtlist,options):=( +//help:Expr3d(point3d,,direction,name); +//help:Expr3d([point3d,,direction,name],options]); + regional(dt,nall,jj); + dt=dtlist; + if(mod(length(dt),3)!=0, + println(" Improper data"); + , + nall=length(dt)/3; + forall(1..nall, + jj=#*3-2; + tmp=dt_jj; + if(ispoint(tmp),tmp=parse(text(tmp)+"3d")); + dt_jj=Parapt(tmp); + ); + Expr(dt,options); + ); +); //181218to +////%Expr3d end//// + ////%Perppt start//// Perppt(name,ptstr,pLstr):=Putperp(name,ptstr,pLstr,"draw"); Perppt(name,ptstr,pLstr,option):=Putperp(name,ptstr,pLstr,option); @@ -2870,7 +2918,7 @@ VertexEdgeFace(nm,vfnLorg,optionorg):=( tmp=parse(text(vtx)+"3d"); vname=text(vtx); , - vname="V"+text(#); //181107 + vname="V"+nm+text(#); //181212 if(vtxflg==1, //180905 if(fixflg==1, Putpoint3d([vname,vtx],"fix"); diff --git a/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylibbasic1logr.txt b/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylibbasic1logr.txt index 6f0e1a2326e..813140039fd 100644 --- a/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylibbasic1logr.txt +++ b/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylibbasic1logr.txt @@ -1,3 +1,22 @@ +// 20181217 +// Drwxy debugged +// 20181216 +// Ketinit changed (AXSTYLE changed) +// 20181215 +// Ketinit changed (AXSTYLE added) +// Setarrow debugged +// 20181214 +// Acos, Asin, Atan, Sqr added +// Setarrow added +// Arrowhead changed (options) +// 20181212 +// Colorrgb2cmyk debugged +// Colorcode changed ( some have been deleted) +// Colorname2rgb added +// Divoptions changed (color name) +// Ketinit changed (Fillstore added) +/ 20181209 +// Fillstore changed ( The color of ketcindy buttons fixed) // 20181125 // Fillstore,Fillblack,Fillrestore added // 2018111 diff --git a/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylibbasic1r.cs b/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylibbasic1r.cs index be7bd1adedf..a3376741a8d 100644 --- a/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylibbasic1r.cs +++ b/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylibbasic1r.cs @@ -14,7 +14,7 @@ // along with this program. If not, see <http://www.gnu.org/licenses/> // -println("KeTCindy V.3.2.3(20181201)"); +println("KeTCindy V.3.2.3(20181216)"); println(ketjavaversion()); println("ketcindylibbasic1(20181125) loaded"); @@ -66,7 +66,7 @@ Ketinit(work,sy,rangex,rangey):=(//181001to TenSizeInit=0.02; TenSize=TenSizeInit; YaSize=1; YaAngle=18; YaPosition=1; - YaThick=1; YaStyle="tf"; + YaCut=0; YasenStyle="dr,1"; Yajiristyle="tf"; KETPICCOUNT=1; KCOLOR=[0,0,0]; GLIST=[]; @@ -82,6 +82,8 @@ Ketinit(work,sy,rangex,rangey):=(//181001to COM2ndlist=[]; COM2ndlistb=[]; //180612 ADDAXES="1"; + AXSTYLE=["l","x","e","y","n","O","sw","","",""]; //181216 + AXCOUNT=1; //181215 LFmark=unicode("000a"); CRmark=unicode("000d");//16.12.13 Dq=unicode("0022"); @@ -91,6 +93,7 @@ Ketinit(work,sy,rangex,rangey):=(//181001to OutComList=[]; OutFileLIst=[]; // 15.10.22 FigPdfList=[]; // 16.04.08 + Fillstore(); //181212 ADDPACK=[]; // 16.05.16 GPACK="tpic"; //180817 ErrFlag=0; @@ -167,11 +170,6 @@ Ketinit(work,sy,rangex,rangey):=(//181001to letterc,mboxc,mboxc,mboxc,62,2,letterc]; SlideMargin=[0,0]; //180908 ThinDense=0.1;//17.01.08 - if(indexof(PathS,"-5.")>0,//17.12.03from - LibnameS=Dirlib+pathsep()+"ketpicsciL5"; - , - LibnameS=Dirlib+pathsep()+"ketpicscifiles6"; - ); if(indexof(PathT,"pdflatex")+indexof(PathT,"lualatex")>0, LibnameS=replace(LibnameS,"ketpic","ketpic2e"); );//17.12.03until @@ -180,10 +178,34 @@ Ketinit(work,sy,rangex,rangey):=(//181001to ////%Fillstore start//// Fillstore():=( - regional(tmp,tmp1,out); + regional(tmp,tmp1,out,dtL,txtL,clrL,txt,clr,nn,jj); + dtL=[ //181209from + ["Figure",[1,0.29,0.29]],["Parent",[1,1,0]], + ["ParaF",[0,1,1]],["Flip",[0,0,1]],["Anime",[0.51,0.95,1]], + ["Title",[0,1,0]],["Slide",[0.47,0,0.72]],["Digest",[1,0.74,0.47]], + ["KeTJS",[0,1,1]],["KeTJSoff",[0,1,1]], + ["Objview",[0,1,0]] + ]; + txtL=apply(dtL,#_1); + clrL=apply(dtL,#_2); tmp1=allelements(); tmp1=select(tmp1,indexof(#.name,"Text")>0); - out=apply(tmp1,[#.name,#.fillcolor]); + out=[]; + forall(1..(length(tmp1)),nn, + tmp=tmp1_nn; + txt=tmp.text; + tmp=select(1..(length(txtL)),txtL_#==txt); + if(length(tmp)>0, + jj=tmp_1; + clr=clrL_jj; + tmp=tmp1_nn; + tmp.fillcolor=clr; + , + tmp=tmp1_nn; + clr=tmp.fillcolor; + ); + out=append(out,[tmp.name,clr,tmp.text]); + ); //181209to out; ); ////%Fillstore end//// @@ -192,9 +214,7 @@ Fillstore():=( Fillblack():=Fillblack("Running"); Fillblack(str):=( regional(tmp,tmp1,store); - tmp1=allelements(); - tmp1=select(tmp1,indexof(#.name,"Text")>0); - store=apply(tmp1,[#.name,#.fillcolor,#.text]); + store=Fillstore(); //181209 tmp=select(tmp1,#.name=="Text0"); if(length(tmp)==0, forall(store, @@ -474,6 +494,34 @@ Sep1000(va):=( //17.07.18 ); ////%Sep1000 end//// +////%Acos start//// +Acos(x):=( +//help:Acos(1.000001); + re(arccos(x)); +); +////%Acos end//// + +////%Asin start//// +Asin(x):=( +//help:Asin(1.000001); + re(arcsin(x)); +); +////%Asin end//// + +////%Atan start//// +Atan(x):=( +//help:Atan(1); + re(arctan(x)); +); +////%Atan end//// + +////%Sqr start//// +Sqr(x):=( +//help:Sqr(-0.00001); + if(x<0,0,sqrt(x)); +); +////%Sqr end//// + ////%Factorial start//// Factorial(n):=( //help:Factorial(5); @@ -1225,14 +1273,7 @@ Divoptions(options):=( tmp1=colorCmyk2Rgb(tmp1); ); , - if(tmp2=="red",tmp1=[1,0,0];color=tmp1); - if(tmp2=="green",tmp1=[0,1,0];color=tmp1); - if(tmp2=="blue",tmp1=[0,0,1];color=tmp1); - if(tmp2=="black",tmp1=[0,0,0];color=tmp1); - if(tmp2=="white",tmp1=[1,1,1];color=tmp1); - if(tmp2=="cyan",tmp1=[0,1,1];color=tmp1); - if(tmp2=="magenta",tmp1=[1,0,1];color=tmp1); - if(tmp2=="yellow",tmp1=[1,1,0];color=tmp1); + tmp1=Colorname2rgb(tmp2); color=tmp1; //181212 ); tmp="color->"+text(tmp1); opcindy=opcindy+","+tmp; @@ -3042,8 +3083,12 @@ ColorRgb2Cmyk(clr):=( regional(clrnew,tmp,black); tmp=apply(clr,1-#); black=min(tmp); - tmp=apply(clr,(1-#-black)/(1-black)); - clrnew=append(tmp,black); + if(black!=1, //181112from + tmp=apply(clr,(1-#-black)/(1-black)); + clrnew=append(tmp,black); + , + clrnew=[0,0,0,1]; + ); //181112to clrnew; ); ////%ColorRgb2Cmyk end//// @@ -3178,7 +3223,7 @@ Colorhslrgb(hsl):=( ); ////%Colorhslrgb end//// -////%hue2rgb start//// +////%Colorhue2rgb start//// hue2rgb(vv1,vv2,vh):=( regional(out); if ( vh < 0.0 ,vh =vh+1); @@ -3198,7 +3243,7 @@ hue2rgb(vv1,vv2,vh):=( ); out; ); -////%hue2rgb end//// +////%Colorhue2rgb end//// ////%Colorrgbhwb start//// Colorrgbhwb(sL):=( @@ -3239,160 +3284,74 @@ Colorhwbrgb(sLorg):=( ); ////%Colorhwbrgb end//// -////%Colorhslhsv start//// -Colorhslhsv(sL):=( - regional(dl1,dl2,dl3,dL); - dl1=sL_1; - if(sL_3 == 0, - // no need to do calc on black - // also avoids divide by 0 error - dL= [0, 0, 0]; - , - sL_3 = sL_3 * 2; - if(sL_3 <= 1,sL_2 = sL_2 * sL_3,sL_2 = sL_2 * (2 - sL_3)); - dl3 = (sL_3 + sL_2) / 2; - dl2 = (2 * sL_2) / (sL_3 + sL_2); - dL = [dl1, dl2, dl3]; - ); - dL; -); -////%Colorhslhsv end//// - ////%Colorcode start//// -Colorcode(src,dest,sL):=( +Colorcode(src,dest,sL):=( // 181212 some colorchange deleted //help:Colorcode("rgb","cmyk",[1,0.5,0]); regional(tmp,tmp1,tmp2,tmp3,mn,mx,delta,black,dL,flg); regional(dl1,dl2,dl3); + if(src=="rgb" & dest=="cmyk",dL=Colorrgb2cmyk(sL)); + if(src=="cmyk" & dest=="rgb",dL=Colorcmyk2rgb(sL)); if(src=="rgb" & dest=="hsv", dL=Colorrgbhsv(sL)); - if(src=="hsv" & dest=="rgb", dL=Colorhsvrgb(sL)); if(src=="rgb" & dest=="hsl", dL=Colorrgbhsl(sL)); - if(src=="hsl" & dest=="rgb", dL=Colorhslrgb(sL)); if(src=="rgb" & dest=="hwb", dL=Colorrgbhwb(sL)); + if(src=="hsv" & dest=="rgb", dL=Colorhsvrgb(sL)); + if(src=="hsl" & dest=="rgb", dL=Colorhslrgb(sL)); if(src=="hwb" & dest=="rgb", dL=Colorhwbrgb(sL)); - if(src=="hsl" & dest=="hsv", dL=Colorhslhsv(sL)); - if(src=="hsv" & dest=="hsl", - dl1 = sL_1; - dl3 = (2 - sL_2) * sL_3; - dl2 = sL_2 * sL_3; - if(dl3 <= 1,dl2 = dl2/dl3,dl2=dl2/(2 - dl3)); - dl3 =d l3/ 2; - dL = [dl1, dl2 , dl3 ]; - ); - - if(src=="rgb" & dest=="cmyk", - tmp=apply(sL,1-#); - black=min(tmp); - tmp=apply(sL,(1-#-black)/(1-black)); - dL=append(tmp,black); - ); - if(src=="cmyk" & dest=="rgb", - black=sL_4; - tmp=apply(sL,1-min(1,#*(1-black)+black)); - dL=tmp_(1..3); - ); - if(src=="hsv" & dest=="cmyk", - tmp=Colorcode("hsv","rgb",sL); - dL=Colorcode("rgb","cmyk",tmp); - ); - if(src=="cmyk" & dest=="hsv", - tmp=Colorcode("cmyk","rgb",sL); - dL=Colorcode("rgb","hsv",tmp); - ); - - if(src=="hsv" & dest=="hwb", - tmp = Colorcode("hsv","rgb",sL); - dL = Colorcode("rgb","hwb",tmp); - ); - if(src=="hwb" & dest=="hsv", - tmp = Colorcode("hwb","rgb",sL); - dL = Colorcode("rgb","hsv",tmp); - ); - if(src=="hsl" & dest=="hwb", - tmp = Colorcode("hsl","rgb",sL); - dL = Colorcode("rgb","hwb",tmp); - ); - if(src=="hwb" & dest=="hsl", - tmp = Colorcode("hwb","rgb",sL); - dL = Colorcode("rgb","hsl",tmp); - ); - if(src=="hsl" & dest=="cmyk", - tmp = Colorcode("hsl","rgb",sL); - dL = Colorcode("rgb","cmyk",tmp); - ); - if(src=="hwb" & dest=="cmyk", - tmp = Colorcode("hwb","rgb",sL); - dL = Colorcode("rgb","cmyk",tmp); - ); - if(src=="cmyk" & dest=="hsl", - tmp = Colorcode("cmyk","rgb",sL); - dL = Colorcode("rgb","hsl",tmp); - ); - if(src=="cmyk" & dest=="hwb", - tmp = Colorcode("cmyk","rgb",sL); - dL = Colorcode("rgb","hwb",tmp); - ); - if(src=="hsb" & dest=="rgb",dL=Colorcode("hsv","rgb",sL)); - if(src=="rgb" & dest=="hsb",dL=Colorcode("rgb","hsv",sL)); - - if(src=="hsb" & dest=="hsl",dL=Colorcode("hsv","hsl",sL)); - if(src=="hsl" & dest=="hsb",dL=Colorcode("hsl","hsv",sL)); - - if(src=="hsb" & dest=="hwb",dL=Colorcode("hsv","hwb",sL)); - if(src=="hwb" & dest=="hsb",dL=Colorcode("hwb","hsv",sL)); - - if(src=="hsb" & dest=="cmyk",dL=Colorcode("hsv","cmyk",sL)); - if(src=="cmyk" & dest=="hsb",dL=Colorcode("cmyk","hsv",sL)); - dL; ); ////%Colorcode end//// -////%Colorinfile start//// -Colorinfile(filename,clrf,clrt):=( - regional(tmp,tmp1,tmp2,head,cstrL,chstrL,head,body); - if(length(clrf_1)==3, - head="[rgb]{"; - , - head="[cmyk]{"; - ); - tmp=apply(clrf,text(#)); - cstrL=apply(tmp,head+substring(#,1,length(#)-1)+"}"); - if(length(clrt_1)==3, - head="[rgb]{"; +////%Colorname2rgb start//// +Colorname2rgb(name):=( //181212 +//help:Colorname2rgb("sepia"); + regional(dL,nameL,codeL,tmp); + dL=[ + ["greenyellow",[0.15,0,0.69,0]],["yellow",[0,0,1,0]], + ["goldenrod",[0,0.1,0.84,0]],["dandelion",[0,0.29,0.84,0]], + ["apricot",[0,0.32,0.52,0]],["peach",[0,0.5,0.7,0]], + ["melon",[0,0.46,0.5,0]],["yelloworange",[0,0.42,1,0]], + ["orange",[0,0.61,0.87,0]],["burntorange",[0,0.51,1,0]], + ["bittersweet",[0,0.75,1,0.24]],["redorange",[0,0.77,0.87,0]], + ["mahogany",[0,0.85,0.87,0.35]],["maroon",[0,0.87,0.68,0.32]], + ["brickred",[0,0.89,0.94,0.28]],["red",[0,1,1,0]], + ["orangered",[0,1,0.5,0]],["rubinered",[0,1,0.13,0]], + ["wildstrawberry",[0,0.96,0.39,0]],["salmon",[0,0.53,0.38,0]], + ["carnationpink",[0,0.63,0,0]],["magenta",[0,1,0,0]], + ["violetred",[0,0.81,0,0]],["rhodamine",[0,0.82,0,0]], + ["mulberry",[0.34,0.9,0,0.02]],["redviolet",[0.07,0.9,0,0.34]], + ["fuchsia",[0.47,0.91,0,0.08]],["lavender",[0,0.48,0,0]], + ["thistle",[0.12,0.59,0,0]],["orchid",[0.32,0.64,0,0]], + ["darkorchid",[0.4,0.8,0.2,0]],["purple",[0.45,0.86,0,0]], + ["plum",[0.5,1,0,0]],["violet",[0.79,0.88,0,0]], + ["royalpurple",[0.75,0.9,0,0]],["blueviolet",[0.86,0.91,0,0.04]], + ["periwinkle",[0.57,0.55,0,0]], ["cadetblue",[0.62,0.57,0.23,0]], + ["cornflowerblue",[0.65,0.13,0,0]],["midnightblue",[0.98,0.13,0,0.43]], + ["navyblue",[0.94,0.54,0,0]],["royalblue",[1,0.5,0,0]], + ["blue",[1,1,0,0]],["cerulean",[0.94,0.11,0,0]], + ["cyan",[1,0,0,0]],["processblue",[0.96,0,0,0]], + ["skyblue",[0.62,0,0.12,0]],["turquoise",[0.85,0,0.2,0]], + ["tealblue",[0.86,0,0.34,0.02]],["aquamarine",[0.82,0,0.3,0]], + ["bluegreen",[0.85,0,0.33,0]],["emerald",[1,0,0.5,0]], + ["junglegreen",[0.99,0,0.52,0]],["seagreen",[0.69,0,0.5,0]], + ["green",[1,0,1,0]],["forestgreen",[0.91,0,0.88,0.12]], + ["pinegreen",[0.92,0,0.59,0.25]],["limegreen",[0.5,0,1,0]], + ["yellowgreen",[0.44,0,0.74,0]],["springgreen",[0.26,0,0.76,0]], + ["olivegreen",[0.64,0,0.95,0.4]],["rawsienna",[0,0.72,1,0.45]], + ["sepia",[0,0.83,1,0.7]],["brown",[0,0.81,1,0.6]], + ["tan",[0.14,0.42,0.56,0]],["gray",[0,0,0,0.5]], + ["black",[0,0,0,1]],["white",[0,0,0,0]] + ]; + tmp=select(dL,#_1==name); + if(length(tmp)>0, + tmp=tmp_1; + code=tmp_2; + code=Colorcmyk2rgb(code); , - head="[cmyk]{"; - ); - tmp=apply(clrt,text(#)); - chstrL=apply(tmp,head+substring(#,1,length(#)-1)+"}"); - tmp1=load(filename); - tmp=tokenize(tmp1,"{\unitlength"); - head=tokenize(tmp_1,"%%%"); - head=head_(2..(length(head))); - head=apply(head,"%%%"+#); - tmp2=tmp_2; - forall(1..5, - tmp2=replace(tmp2,cstrL_#,chstrL_#); - ); - body=tokenize(tmp2,"%"); - body_1="{\unitlength"+body_1; - body=apply(body,#+"%"); - body=body_(1..(length(body)-1)); - tmp=replace(filename,".tex","new.tex"); - SCEOUT=openfile(tmp); - forall(head, - println(SCEOUT,#); - ); - forall(1..(length(body)), - tmp=body_#; - if(#<length(body), - println(SCEOUT,tmp); - , - print(SCEOUT,tmp) - ); + println(" "+name+" not found"); + code=[0,0,0]; ); - closefile(SCEOUT); ); -////%Colorinfile end//// +////%Colorname2rgb end//// ////%GetLinestyle start//// GetLinestyle(str,name):=( @@ -5279,6 +5238,37 @@ Putintersect(nm,pdata1,pdata2,ptno):=( ); ////%Putintersect end//// +////%Setarrow start//// +Setarrow():=Setarrow([]); +Setarrow(arglist):=( +//help:Setarrow([-1,-1,-1,1,0.3]); +//help:Setarrow([size(1),angle(18),position(1),cut(0),segstyle("dr,1")]); + regional(tmp); + tmp=select(arglist,isreal(#)); + if(length(tmp)==0, + println([YaSize,YaAngle,YaPosition,YaCut,YasenStyle]); + ); + if(length(tmp)>=1, + if((tmp_1>0),YaSize=tmp_1); + ); + if(length(tmp)>=2, + if((tmp_2>0)&(tmp_2<90),YaAngle=tmp_2); + ); + if(length(tmp)>=3, + if((tmp_3>=0)&(tmp_3<=1),YaPosition=tmp_3); + ); + if(length(tmp)>=4, + if((tmp_4>=0)&(tmp_4<1),YaCut=tmp_4); + ); + tmp=select(arglist,isstring(#)); + if(length(tmp)>0, + YasenStyle=tmp_1; + ); + [YaSize,YaAngle,YaPosition,YaCut,YasenStyle]; +); +////%Setarrow start//// + + ////%Arrowheaddata start//// Arrowheaddata(point,direction):=Arrowheaddata(point,direction,[]); Arrowheaddata(point,direction,options):=( @@ -5387,7 +5377,8 @@ Arrowhead(Arg1,Arg2,Arg3):=( ); Arrowhead(nm,point,direction,optionsorg):=(//181018from //help:Arrowhead("1",B,B-A); -//help:Arrowhead(options=[size(1),angle(18),position(1),cut(0),"Coor=P(L)"]); +//help:Arrowhead(options=[size(1),angle(18),position(1),cut(0),"Coord=P(L)"]); +//help:Arrowhead(the default is -1 for numeric option); //help:Arrowhead(A,"gr1"); regional(name,Ltype,Noflg,reL,opstr,opcindy,color,eqL,coord, options,cut,pP,Houkou,ptstr,hostr,tmp,tmp1,tmp2,list); @@ -5410,13 +5401,17 @@ Arrowhead(nm,point,direction,optionsorg):=(//181018from options=remove(options,[#]); ); ); //181018to - cut=0; //181110from - if(length(reL)>3, - cut=reL_4; - tmp=reL_(1..3); - options=remove(options,reL); - options=concat(options,tmp); - ); //181110from + tmp1=[YaSize,YaAngle,YaPosition,YaCut]; //181214from + forall(1..(length(reL)), + if(reL_#<0, reL_#=tmp1_#); + ); + forall((length(reL)+1)..4, + reL=append(reL,tmp1_#); + ); + cut=reL_4; + tmp=reL_(1..3); + options=select(options,!isreal(#)); + options=concat(options,tmp); //181214to if(ispoint(direction),Houkou=direction.xy); //181018 if(isstring(direction),Houkou=parse(direction),Houkou=direction); if(MeasureDepth(Houkou)==2,Houkou=Houkou_1); @@ -5487,10 +5482,14 @@ Arrowdata(nm,ptlist,optionsorg):=( //help:Arrowdata("1",[A,B]); //help:Arrowdata("1",[pt1,pt2]); //help:Arrowdata(options=[size(1),angle(18),pos(1),cut(0),"Cutend=0,0","Coord=p/l"]); +//help:Arrowdata(optionsadded=["line"]); regional(options,Ltype,Noflg,name,opstr,opcindy,eqL,reL,strL,color,size,coord, flg,lineflg,cutend,tmp,tmp1,tmp2,pA,pB,angle,segpos,cut); name="ar"+nm; options=optionsorg; + tmp=select(options,isstring(#)); //181214from + tmp1=select(tmp,contains(["dr","da","do","id"],substring(#,0,2))); + if(length(tmp1)==0,options=append(options,YasenStyle)); //181214to tmp=Divoptions(options); Ltype=tmp_1; Noflg=tmp_2; @@ -5500,19 +5499,17 @@ Arrowdata(nm,ptlist,optionsorg):=( color=tmp_(length(tmp)-2); opstr=tmp_(length(tmp)-1); opcindy=tmp_(length(tmp)); - size=1; // 15.06.11 - angle=18; - segpos=1; - cut=0; //181110from + tmp1=[YaSize,YaAngle,YaPosition,YaCut]; //181214from forall(1..(length(reL)), - tmp=reL_#; - if(#==1,size=tmp); - if(#==2,angle=tmp); - if(#==3, - segpos=tmp; - ); - if(#==4,cut=tmp); - ); //181110to + if(reL_#<0, reL_#=tmp1_#); + ); + forall((length(reL)+1)..4, + reL=append(reL,tmp1_#); + ); + size=reL_1; + angle=reL_2; + segpos=reL_3; + cut=reL_4; lineflg=0; if(contains(strL,"l")%contains(strL,"L"), lineflg=1; diff --git a/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylibbasic2logr.txt b/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylibbasic2logr.txt index ab1ae5703e7..849afc3c4b7 100644 --- a/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylibbasic2logr.txt +++ b/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylibbasic2logr.txt @@ -1,3 +1,17 @@ +// 20181224 +// WritetoRS changed (Closefile("0")) +// 20181219 +// BBdata debugged (macosx => ismacosx ) +// 20181218 +// Letter, Expr changed (pt,dir,str,options added ) +// 20181216 +// Drwxy changed ( linestyle,colorax,colorla ) +// 20181215 +// Setax, Drwxy, Windispg changed ( Axstyle ) +// 20181214 +// WritetoRS changed ( Definition of Acos,Asin,Atan,Sqr,Factorial,Norm added ) +// 20181213 +// Usegraphics, WritetoRS changed ( tikz added) // 20181125 // Mkslides, Mksldesummary chanded (Fillblack added ) // Presentation changed ( load => readfile2str ) diff --git a/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylibbasic2r.cs b/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylibbasic2r.cs index e96e1d36cce..c904a1d0fae 100644 --- a/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylibbasic2r.cs +++ b/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylibbasic2r.cs @@ -14,7 +14,7 @@ // along with this program. If not, see <http://www.gnu.org/licenses/> // -println("ketcindybasic2(20181125) loaded"); +println("ketcindybasic2(20181224) loaded"); //help:start(); @@ -499,16 +499,6 @@ MakeRarg(arglist):=( ); ////%MakeRarg end//// -////%Setax start//// -Setax(arglist):=( -//help:Setax(["l","x","e","y","n","O","sw"]); -//help:Setax([7,"nw"]); - regional(tmp); - tmp=MakeRarg(arglist); - Com1st("Setax("+tmp+")"); -); -////%Setax end//// - ////%Htickmark start//// Htickmark(arglist):=( //help:Htickmark([1,"1",2,"sw","2"]); @@ -589,22 +579,109 @@ Htick(px,lenorg,options):=( ); ////%Htick end//// +////%Setax start//// +Setax(arglist):=( +//help:Setax(["l","x","e","y","n","O","sw",]); +//help:Setax([7,"nw"]); +//help:Setax([8,linestyle,colorax,colorlabel]); + regional(st,nn,tmp); //181215from + st=1; nn=1; + if(isreal(arglist_1), + st=2; + nn=arglist_1; + ); + forall(st..(length(arglist)), + tmp=arglist_#; + if(length(tmp)>0,AXSTYLE_nn=tmp); + nn=nn+1; + ); //181215from +// tmp=MakeRarg(arglist); +// Com1st("Setax("+tmp+")"); +); +////%Setax end//// + ////%Drwxy start//// -Drwxy():=Drwxy([]); //180820from -Drwxy(options):=( +Drwxy():=Drwxy([]); +Drwxy(optionsorg):=( //help:Drwxy(); //help:Drwxy(options=["Origin=[0,0]","Xrng=","Yrng=","Ax=l,x,e,..."]); - regional(tmp); - tmp=""; - forall(options, - if(length(tmp)>0, - tmp=tmp+","+Dqq(#); - , - tmp=Dqq(#); + regional(options,color,eqL,strL,org,xrng,yrng,ax,st,nn,size, + linesty,colorax,colorla,tmp,tmp1,tmp2); + options=optionsorg; + tmp=Divoptions(options); + color=tmp_(length(tmp)-2); + eqL=tmp_5; + org=[0,0]; + xrng=[XMIN,XMAX]; + yrng=[YMIN,YMAX]; + ax=AXSTYLE; + linesty=ax_8; + if(isstring(ax_9),colorax=ax_9,colorax=text(ax_9)); + if(length(colorax)>0, + colorax="Color="+colorax; + ); + if(isstring(ax_10),colorla=ax_10,colorla=text(ax_10)); + if(length(colorla)>0, //181217from + colorla="Color="+colorla; + , + if(length(colorax)>0, + colorla=colorax; + ); + ); //181217to + forall(eqL, + tmp=Strsplit(#,"="); + tmp1=Toupper(substring(tmp_1,0,1)); + if(tmp1=="O", + org=parse(tmp_2); + options=remove(options,[#]); + ); + if(tmp1=="X", + xrng=parse(tmp_2); + options=remove(options,[#]); + ); + if(tmp1=="Y", + yrng=parse(tmp_2); + options=remove(options,[#]); + ); + if(tmp1=="A", + tmp2=tokenize(tmp_2,","); + st=1; nn=1; + if(isreal(tmp2_1), + st=2; + nn=tmp2_1; + ); + forall(st..(length(tmp2)), + tmp=tmp2_#; + if(length(tmp)>0,ax_nn=tmp); + nn=nn+1; + ); + options=remove(options,[#]); ); ); - Com2nd("Drwxy("+tmp+")"); //180820to - Addax(0); // 16.01.21 + options=append(options,linesty); //181216 + if(substring(ax_1,0,1)=="a", + strL=select(options,isstring(#)); //181216 + tmp=select(strL,contains(["dr","da","do","id"],substring(#,0,2))); + if(length(tmp)==0,options=append(options,YasenStyle)); + tmp=substring(ax_1,1,length(ax_1)); //181216(2lines) + if(length(tmp)>0,size=parse(tmp),size=YaSize); + tmp1=concat(options,[size,YaAngle,YaPosition,YaCut,colorax]);//181216 + tmp=[[xrng_1,org_2],[xrng_2,org_2]]; + Arrowdata("axx"+text(AXCOUNT),tmp,tmp1); + tmp=[[org_1,yrng_1],[org_1,yrng_2]]; + Arrowdata("axy"+text(AXCOUNT),tmp,tmp1); + , + tmp=[[xrng_1,org_2],[xrng_2,org_2]]; + tmp1=append(options,colorax);//181216 + Listplot("axx"+text(AXCOUNT),tmp,tmp1); + tmp=[[org_1,yrng_1],[org_1,yrng_2]]; + Listplot("axy"+text(AXCOUNT),tmp,tmp1); + ); + AXCOUNT=AXCOUNT+1; + Expr([[xrng_2,org_2],ax_3,ax_2],[colorla]);//181216(3lines) + Expr([[org_1,yrng_2],ax_5,ax_4],[colorla]); + Letter([org,ax_7,ax_6],[colorla]); + // Addax(0); // 16.01.21 ); ////%Drwxy end//// @@ -651,7 +728,7 @@ Drawpoint(ptlistorg,nn):=( ////%Addax start//// Addax(param):=( //help:Addax(0); - ADDAXES=textformat(param,5); + ADDAXES=text(param); ); ////%Addax end//// @@ -676,6 +753,7 @@ Expr(listorg,options):=( //16.10.09 ////%Letter start//// Letter(Pt,Dr,St):=Letter([Pt,Dr,St]); Letter(list):=Letter(list,[]); +Letter(Pt,Dr,St,options):=Letter([Pt,Dr,St],options);//181218 Letter(list,options):=( //help:Letter([C,"c","Graph of $f(x)$"]); //help:Letter([C,"c","xy"],["size->30"]); @@ -812,6 +890,7 @@ Letterrot(pt,dir,tmov,nmov,str,options):=( ////%Exprrot start//// Exprrot(pt,dir,str):=Exprrot(pt,dir,0,0,str,[]); +Expr(pt,dir,str,options):=Expr([pt,dir,str],options);//181218 Exprrot(pt,dir,Arg1,Arg2):=( if(islist(Arg2), Exprrot(pt,dir,"t0n0",Arg1,Arg2); @@ -2649,6 +2728,10 @@ Inwindow(point,xrng,yrng):=( ////%Windispg start//// Windispg():=( regional(Nj,Nk,Dt,Vj,tmp,tmp1,tmp2,opcindy); + if(ADDAXES=="1", //181215from + Drwxy(); +// ADDAXES="0"; + ); //181215to gsave(); layer(KETPIClayer); forall(GCLIST,Nj, @@ -2786,18 +2869,30 @@ WritetoRS(filename,shchoice):=( println(SCEOUTPUT,"setwd('"+tmp1+"')"); );//180409to tmp=replace(Libname,"\","/"); //17.09.24from - println(SCEOUTPUT,"source('"+tmp+".r')");//temporary - if((indexof(PathT,"pdflatex")>0)%(indexof(PathT,"lualatex")>0) - %(GPACK=="pict2e"), // 180817 + println(SCEOUTPUT,"source('"+tmp+".r')"); //181213 + if((indexof(PathT,"pdflatex")>0)%(indexof(PathT,"lualatex")>0), + if(GPACK=="tpic",GPACK="pict2e"); + ); + if(GPACK=="pict2e", // 180817 tmp=replace(tmp+"_rep2e","\","/"); println(SCEOUTPUT,"source('"+tmp+".r')"); ); + if(GPACK=="tikz", //181213from + tmp=replace(tmp+"_reptikz","\","/"); + println(SCEOUTPUT,"source('"+tmp+".r')"); + ); //181213to println(SCEOUTPUT,"Ketinit()"); println(SCEOUTPUT,"cat(ThisVersion,'\n')"); println(SCEOUTPUT,"Fnametex='"+Fnametex+"'"); println(SCEOUTPUT,"FnameR='"+FnameR+"'"); println(SCEOUTPUT,"Fnameout='"+Fnameout+"'"); println(SCEOUTPUT,"arccos=acos; arcsin=asin; arctan=atan"); + println(SCEOUTPUT,"Acos<- function(x){acos(max(-1,min(1,x)))}"); + println(SCEOUTPUT,"Asin<- function(x){asin(max(-1,min(1,x)))}"); + println(SCEOUTPUT,"Atan=atan"); + println(SCEOUTPUT,"Sqr<- function(x){if(x>=0){sqrt(x)}else{0}}"); + println(SCEOUTPUT,"Factorial=factorial"); + println(SCEOUTPUT,"Norm<- function(x){norm(matrix(x,nrow=1),"+Dqq("2")+")}"); println(SCEOUTPUT,""); forall(COM0thlist, if(indexof(#,"Texcom")==0, //17.09.22 @@ -2906,7 +3001,8 @@ WritetoRS(filename,shchoice):=( if(length(GrL)>0, println(SCEOUTPUT," Drwline(GrL)"); ); - println(SCEOUTPUT,"Closefile('"+ADDAXES+"')"); + // println(SCEOUTPUT,"Closefile('"+ADDAXES+"')"); //181224(2line) + println(SCEOUTPUT,"Closefile("+Dqq("0")+")"); println(SCEOUTPUT,""); println(SCEOUTPUT,"}"); if(shchoice=="sh", @@ -3498,9 +3594,13 @@ Addpackage(packorg):=( ////%Usegraphics start//// Usegraphics(gpack):=( //180817 -//help:Usegrapchics("pict2e"); +//help:Usegraphics("pict2e"); if(!contains(ADDPACK,gpack), - Addpackage([gpack]); + if(gpack =="tikz", //181213from + Addpackage(["pgf","tikz"]); + , + Addpackage([gpack]); + ); //181213to ); GPACK=gpack; ); @@ -3521,36 +3621,27 @@ Viewtex():=( );//17.08.13until ); // 16.06.09until println(SCEOUTPUT,tmp); - if((indexof(PathT,"pdflatex")>0)%(indexof(PathT,"lualatex")>0) - %(GPACK=="pict2e"), //16.11.23,12.16,180817 - if(indexof(PathT,"pdflatex")>0, - println(SCEOUTPUT,"\usepackage[pdftex]{pict2e}");//16.11.24 - , - println(SCEOUTPUT,"\usepackage{pict2e}");//16.12.16 - if(indexof(PathT,"lualatex")>0, //180817 - println(SCEOUTPUT,"\usepackage{luatexja}"); - ); - ); - tmp=replace(Dirhead,"\","/"); //17.10.30from - tmp=replace(tmp,"scripts","tex/latex"); - if(isexists(tmp,""), - println(SCEOUTPUT,"\usepackage{ketpic2e,ketlayer2e}"); - , - tmp=replace(Dirhead+"/ketpicstyle","\","/"); - println(SCEOUTPUT,"\usepackage{"+tmp+"/ketpic2e}"); - println(SCEOUTPUT,"\usepackage{"+tmp+"/ketlayer2e}"); - ); - , + if((indexof(PathT,"pdflatex")>0)%(indexof(PathT,"lualatex")>0), //181213from + if(GPACK=="tpic", GPACK="pict2e"); + ); + if(GPACK=="tpic", tmp=replace(Dirhead,"\","/"); - tmp=replace(tmp,"scripts","tex/latex"); - if(isexists(tmp,""), - println(SCEOUTPUT,"\usepackage{ketpic,ketlayer}"); - , - tmp=replace(Dirhead+"/ketpicstyle","\","/"); - println(SCEOUTPUT,"\usepackage{"+tmp+"/ketpic}"); - println(SCEOUTPUT,"\usepackage{"+tmp+"/ketlayer}"); + println(SCEOUTPUT,"\usepackage{ketpic,ketlayer}"); + ); + if(GPACK=="pict2e", + println(SCEOUTPUT,"\usepackage{pict2e}"); + println(SCEOUTPUT,"\usepackage{ketpic2e,ketlayer2e}"); + if(indexof(PathT,"lualatex")>0, + println(SCEOUTPUT,"\usepackage{luatexja}"); + ); + ); + if(GPACK=="tikz", + println(SCEOUTPUT,"\usepackage[pgf,tikz}");//16.11.24 + println(SCEOUTPUT,"\usepackage{ketpic,ketlayer}"); + if(indexof(PathT,"lualatex")>0, + println(SCEOUTPUT,"\usepackage{luatexja}"); ); - );//17.10.30until + );//181213to println(SCEOUTPUT,"\usepackage{amsmath,amssymb}"); println(SCEOUTPUT,"\usepackage{graphicx}"); println(SCEOUTPUT,"\usepackage{color}"); @@ -5448,7 +5539,7 @@ BBdata(fname,optionorg):=( if(iswindows(), kcfile="kc.bat"; , - if(macosx(), + if(ismacosx(), //181219 kcfile="kc.command"; , kcfile="kc.sh"; diff --git a/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylibmvlogr.txt b/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylibmvlogr.txt index 5a8170e32c5..a0a087ca49b 100644 --- a/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylibmvlogr.txt +++ b/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylibmvlogr.txt @@ -1,3 +1,5 @@ +// 20181224 +// Setpara debugged ( ADDAXES=="1") // 20181128 // Mkviewobj changed (Fillblack added) // 20181125 diff --git a/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylibmvr.cs b/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylibmvr.cs index 2c297051bf2..3e43e80d55e 100755 --- a/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylibmvr.cs +++ b/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindylibmvr.cs @@ -14,7 +14,7 @@ // along with this program. If not, see <http://www.gnu.org/licenses/> // -println("ketcindymv(20181125) loaded"); +println("ketcindymv(20181224) loaded"); //help:start(); @@ -56,6 +56,10 @@ Setpara(pathorg,fstr,sL,options,optionsanim):=( ParaOp=append(ParaOp,"m");//180604 ); ParaOpAnim=optionsanim; + if(ADDAXES=="1", //181224rom + Drwxy(); +// ADDAXES="0"; + ); //181224to GLISTback=GLIST; GCLISTback=GCLIST; GOUTLISTback=GOUTLIST; diff --git a/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindyliboutlogr.txt b/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindyliboutlogr.txt index e8d2d6fba0a..5760eda39a2 100644 --- a/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindyliboutlogr.txt +++ b/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindyliboutlogr.txt @@ -1,4 +1,16 @@ -// 201811230 +// 20181218 +// Help (Sfbdparadata ,,,, ) +// 20181217 +// Sfbdparadata debugged (replace fname+nm to fnameall ) +/// 20181209 +// MkprecommandR debugged (arc.. added ) +// Mkviewobj changed ( option "Zax=" added) +// 20181103 +// Mkviewobj changed ( change coord in case of "preview") +// Setobj changed ( option "preview" added ) +// 20181102 +// kcV3 changed ( "preview" for Mac ) +// 20181123 // Mkviewobj debugged ( Out=n ) // CalcbyR changed ( for cat ) // 201811225 diff --git a/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindyliboutr.cs b/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindyliboutr.cs index 904f5dfd369..946743bed6f 100644 --- a/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindyliboutr.cs +++ b/Master/texmf-dist/scripts/ketcindy/ketlib/ketcindyliboutr.cs @@ -14,10 +14,11 @@ // along with this program. If not, see <http://www.gnu.org/licenses/> // -println("ketcindylibout(20181130 loaded"); +println("ketcindylibout(20181218 loaded"); //help:start(); +////%WritetoS start//// WritetoS(fname,cmdL):=( // help:WritetoS("outdata",cmdL); regional(tmp,tmp1,tmp2,filename); @@ -47,6 +48,7 @@ WritetoS(fname,cmdL):=( ); closefile(SCEOUTPUT); ); +////%WritetoS end//// ////%kcS start//// kcS(path,fname):=kcS(path,fname,[]); @@ -134,6 +136,7 @@ kcS(path,fname,optionorg):=( ); ////%kcS end//// +////%SetpathS start//// SetpathS():=( regional(tmp,tmp1); if(!isstring(PathS), // 15.12.11 @@ -151,7 +154,9 @@ SetpathS():=( ); PathS; ); +////%SetpathS end//// +////%ErrhandleS start//// ErrhandleS(fname):=( // 2016.02.28 regional(str); //17.04.14 if(indexof(PathS,"-6.")==0, @@ -167,7 +172,9 @@ ErrhandleS(fname):=( // 2016.02.28 str=[]; //17.04.14 ); ); +////%ErrhandleS end//// +////%Testfunstr start//// Testfunstr(funstr,varx,vary):=( regional(var,val,fun,tmp,tmp1,tmp2); fun=replace(funstr,".x","(1)"); // 16.05.19 @@ -186,7 +193,9 @@ Testfunstr(funstr,varx,vary):=( tmp1=replace(tmp1,var,"("+val+")"); tmp1; ); +////%Testfunstr end//// +////%CalcbyS start//// CalcbyS(name,cmd):=CalcbyS(name,SetpathS(),cmd,[]); CalcbyS(name,Arg1,Arg2):=( if(isstring(Arg1), @@ -429,7 +438,9 @@ CalcbyS(name,path,cmd,optionorg):=( // wait(WaitUnit); ); ); +////%CalcbyS end//// +////%Scifun start//// Scifun(name,fun,argL):=Scifun(name,fun,argL,[]);//16.10.22 Scifun(name,fun,argL,optionorg):=( //help:Scifun("1","date()",[]); @@ -486,7 +497,9 @@ Scifun(name,fun,argL,optionorg):=( ); parse(nm); ); +////%Scifun end//// +////%WritetoR start//// WritetoR(fname,cmdL):=WritetoR(fname,cmdL,[]); WritetoR(fname,cmdL,options):=( // help:WritetoR("outdata",cmdL); @@ -536,7 +549,9 @@ WritetoR(fname,cmdL,options):=( // ); // ); ); +////%WritetoR end//// +////%kcR start//// kcR(path,fname):=kcR(path,fname,[]); kcR(path,fname,optionorg):=( //help:kcR(PathR,"boxdata"); @@ -626,7 +641,9 @@ kcR(path,fname,optionorg):=( setdirectory(Dirwork); ); ); +////%kcR end//// +////%Dataframe start//// Dataframe(nmL,dL):=Dataframe(nmL,dL,[]); Dataframe(nmL,dL,options):=( //help:Dataframe(["name","no1","no2"],dtL); @@ -655,7 +672,9 @@ Dataframe(nmL,dL,options):=( out=replace(out,"[","c("); out=replace(out,"]",")"); ); +////%Dataframe end//// +////%MkprecommandR start//// MkprecommandR():=MkprecommandR(6,"PVOFG"); //180508(9lines) MkprecommandR(Arg):=( regional(out,tmp1); @@ -677,6 +696,7 @@ MkprecommandR(Arg):=( MkprecommandR(prec,chstr):=( regional(cmdL,Plist,tmp,tmp1,tmp2); cmdL=[]; + cmdL=concat(cmdL,["arccos=acos; arcsin=asin; arctan=atan",[]]); //181209 if(indexof(chstr,"P")>0, Plist=[]; forall(remove(allpoints(),[SW,NE]), @@ -739,6 +759,7 @@ MkprecommandR(prec,chstr):=( ); cmdL; ); +////%MkprecommandR end//// ////%CalcbyR start//// CalcbyR(name,cmd):=CalcbyR(name,PathR,cmd,[]); @@ -1079,6 +1100,7 @@ CalcbyR(name,path,cmd,optionorg):=( ); ////%CalcbyR end//// +////%Rfun start//// Rfun(name,fun,argL):=Rfun(name,fun,argL,[]);//16.10.22 Rfun(name,fun,argL,optionorg):=( //help:Rfun("1","rnorm",[10]); @@ -1120,6 +1142,7 @@ Rfun(name,fun,argL,optionorg):=( ); parse(nm); ); +////%Rfun end//// ////%Readcsv start//// Readcsv(file):=Readcsv(Dirwork,file,[]); @@ -1279,6 +1302,7 @@ Readcsv(path,file):=( ); ////%Readcsv end//// +////%Writecsv start//// Writecsv(nmL,data,file):=Writecsv(nmL,data,file,[]); Writecsv(nmL,dataorg,file,optionorg):=( //help:Writecsv([],data,"ex.csv"); @@ -1334,6 +1358,7 @@ Writecsv(nmL,dataorg,file,optionorg):=( ); closefile(SCEOUTPUT); ); +////%Writecsv end//// ////%HatchdataR start//// HatchdataR(nm,iostr,pltlist):=HatchdataR(nm,iostr,pltlist,[]); @@ -3429,7 +3454,7 @@ kcV3(path,fname):=( if(iswindows(), SCEOUTPUT = openfile("kc.bat"); println(SCEOUTPUT,"cd "+Dq+Dirwork+Dq); - tmp=Dq+PathV3+Dq+" "+tmp1+filename; + tmp=Dqq(PathV3)+" "+Dqq(tmp1+filename); println(SCEOUTPUT,tmp); println(SCEOUTPUT,"exit"); closefile(SCEOUTPUT); @@ -3442,7 +3467,12 @@ kcV3(path,fname):=( ); //181125to println(SCEOUTPUT,"#!/bin/sh"); println(SCEOUTPUT,"cd "+Dq+Dirwork+Dq); - tmp=Dq+PathV3+Dq+" "+tmp1+filename; + if(PathV3=="preview", //181202from + tmp="open -a "+Dqq("preview"); + , + tmp=Dqq(PathV3); + ); + tmp=tmp+" "+Dqq(tmp1+filename); //181202to println(SCEOUTPUT,tmp); println(SCEOUTPUT,"exit 0"); closefile(SCEOUTPUT); @@ -3557,7 +3587,45 @@ Changeobjscale(unitlen,fnameorg,foutorg,optionorg):=( ); ////%Changeobjscale end//// +////%Setobj start//// +//Objname(str):=Objname(str,["m","v"]); //180906from +//Objname(str,options):=Setobj(str,options); +Setobj():=Setobj(Fhead,["m","v"]); //180901 +Setobj(Arg1):=( + if(isstring(Arg1), + Setobj(Arg1,["m","v"]); //17.01.12 + , + Setobj(Fhead,Arg1); //180902 + ); +); +Setobj(str,optionsorg):=( //180906to +//help:Setobj(); +//help:Setobj(["v"]); +//help:Setobj(options=["m","v","preview","Zax=y(/n)"]); + regional(options,tmp,strL); + options=select(optionsorg,length(#)>0); //17.12.23from + tmp=Divoptions(options); //181203from + strL=tmp_7; + forall(strL, + if(Toupper(substring(#,0,1))=="P", + PathV3="preview"; + options=remove(options,[#]); + ); + ); //181203to + if(length(str)>0, + OCNAME=str; + ); + if(length(options)>0, + OCOPTION=options; + , + OCOPTION=["m","v"]; + ); //17.12.23until + println("generate OBJCMD. name="+OCNAME+", option="+OCOPTION); +); +////%Setobj end//// + ////%Mkviewobj start//// +Mkviewobj():=Mkviewobj(OCNAME,OBJCMD,OCOPTION); //181209 Mkviewobj(fname,cmdL):=Mkviewobj(Dirwork,fname,cmdL,[]); Mkviewobj(Arg1,Arg2,Arg3):=( if(!isstring(OCNAME), //17.04.13from @@ -3572,13 +3640,11 @@ Mkviewobj(Arg1,Arg2,Arg3):=( ); ); Mkviewobj(pathorg,fnameorg,cmdLorg,optionorg):=( -//help:Mkviewobj(fname,cmdlist); -//help:Mkviewobj(fname,[]); -//help:Mkviewobj(path,fname,cmdlist); -//help:Mkviewobj(options=["M/R","V","Unit=in","Wait=(10)"]); +//help:Mkviewobj(); regional(path,cmdL,eqL,strL,flg,fname,options,make,view,cmdlist, - vtx,face,unit,tmp,tmp1,tmp2,store); + vtx,face,unit,tmp,tmp1,tmp2,store,dt,nn,zax); store=Fillblack(); //181128 +println([3647,store]); path=replace(pathorg,"\","/"); if(substring(path,length(path)-1,length(path))!="/",path=path+"/"); fname=fnameorg; @@ -3591,38 +3657,28 @@ Mkviewobj(pathorg,fnameorg,cmdLorg,optionorg):=( make=-1; view=0; unit=""; + zax="Y"; forall(eqL, - tmp=indexof(#,"="); - tmp1=Toupper(substring(#,0,1)); - tmp2=substring(#,tmp,length(#)); - if(tmp1=="M", - tmp2=Toupper(substring(tmp2,0,1)); - if(tmp2=="N" % tmp2=="F", - make=0; - ); - options=remove(options,[#]); - ); - if(tmp1=="V", - tmp2=Toupper(substring(tmp2,0,1)); - if(tmp2=="N" % tmp2=="F", - view=0; - ); - options=remove(options,[#]); - ); + tmp=Strsplit(#,"="); + tmp1=Toupper(substring(tmp_1,0,1)); if(tmp1=="U", // 16.06.30from - unit=tmp2; + unit=tmp2; + options=remove(options,[#]); + ); // 16.06.30to + if(tmp1=="Z", // 16.06.30from + zax=Toupper(substring(tmp_2,0,1)); options=remove(options,[#]); - ); // 16.06.30until + ); // 16.06.30to ); forall(strL, tmp=Toupper(substring(#,0,1)); if(tmp=="M", make=1; - options=remove(options,[#]); +// options=remove(options,[#]); //181203 ); if(tmp=="R", make=0; - options=remove(options,[#]); +// options=remove(options,[#]); //181203 ); if(tmp=="V", view=1; @@ -3687,49 +3743,31 @@ Mkviewobj(pathorg,fnameorg,cmdLorg,optionorg):=( Changeobjscale(fname,["Unit="+unit]);//16.10.04 ); // 16.06.30until if(view==1, - flg=0; // 16.03.14 from - if(isstring(ViewFile), - if(ViewFile==fname,flg=1); + if((PathV3=="preview")%(zax=="Y"), //181209 + dt=Readlines(fname); + forall(1..(length(dt)),nn, + tmp1=dt_nn; + if(substring(tmp1,0,2)=="v ", + tmp=replace(tmp1," "," "); + tmp=tokenize(tmp," "); + tmp=Sprintf(tmp_(2..4),4); + tmp2="v "+tmp_2+" "+tmp_3+" "+tmp_1; + dt_nn=tmp2; + ); + ); + fname=replace(fname,".","prv."); + SCEOUTPUT = openfile(fname); + forall(dt, + println(SCEOUTPUT,#); + ); + closefile(SCEOUTPUT); ); - if(flg==0, - kcV3(path,fname); - ViewFile=fname; - ); // 16.03.14 until + kcV3(path,fname); ); Fillrestore(store); //181128 ); ////%Mkviewobj end//// -////%Setobj start//// -//Objname(str):=Objname(str,["m","v"]); //180906from -//Objname(str,options):=Setobj(str,options); -Setobj():=Setobj(Fhead,["m","v"]); //180901 -Setobj(Arg1):=( - if(isstring(Arg1), - Setobj(Arg1,["m","v"]); //17.01.12 - , - Setobj(Fhead,Arg1); //180902 - ); -); -Setobj(str,optionsorg):=( //180906to -//help:Setobj(["m","v"]); -//help:Setobj("sample"); -//help:Setobj("sample",options); -//help:Setobj(options=["m","v"]); - regional(options); - if(length(str)>0, - OCNAME=str; - ); - options=select(optionsorg,length(#)>0); //17.12.23from - if(length(options)>0, - OCOPTION=options; - , - OCOPTION=["m","v"]; - ); //17.12.23until - println("generate OBJCMD. name="+OCNAME+", option="+OCOPTION); -); -////%Setobj end//// - ////%Mkobjcmd start//// Mkobjcmd(nm,fd):=Mkobjcmd(nm,fd,[40,40,"+"]); Mkobjcmd(nm,fd,options):=( @@ -5735,7 +5773,7 @@ SfbdparadataC(nm,fd):=( SfbdparadataC(nm,fd,options):= SfbdparadataC(nm,fd,options,["do"]); SfbdparadataC(nm,fdorg,optionorg,optionshorg):=( -//help:Sfbdparadata("1",Fd); +//help:Sfbdparadata("1",Fd,nohiddenoptions,hiddenoptions); regional(funnm,fd,options,optionsh,name2,name3,name2h,name3h,waiting, eqL,reL,strL,fname,tmp,tmp1,tmp2,flg,wflg,cmdflg); if(ChNumber==0,ChNumber=Ch); @@ -5811,7 +5849,7 @@ SfbdparadataC(nm,fdorg,optionorg,optionshorg):=( ]; if(cmdflg==1, //180531from println(" ExeccmdC will generate "+ name3+","+name3h); - tmp=replace(cmdL_5,"fname"+funnm,"fnameall");cmdL_5=tmp; + tmp=replace(cmdL_5,"fname"+nm,"fnameall");cmdL_5=tmp; //181217 tmp=select(CommandListC,indexof(#,"output3")>0); //180601from if(length(tmp)>0, tmp=replace(cmdL_6,Dqq("w"),Dqq("a"));cmdL_6=tmp; @@ -5867,8 +5905,7 @@ CrvsfparadataC(nm,fk,sfbd,fd):= CrvsfparadataC(nm,fk,sfbd,fd,options):= CrvsfparadataC(nm,fk,sfbd,fd,options,["do"]); CrvsfparadataC(nm,Fk,sfbdorg,fdorg,optionorg,optionshorg):=( -//help:Crvsfparadata("1","ax3d","sfbd3d1",Fd); -//help:Crvsfparadata(options=["Use=y(/n)"]; +//help:Crvsfparadata("1","ax3d","sfbd3d1",Fd,,nohiddenoptions,hiddenoptions); regional(funnm,sfbd,fd,options,optionsh,name2,name3,name2h,name3h,waiting, eqL,reL,strL,fname,tmp,tmp1,tmp2,flg,wflg,useflg,cmdlfg,ii,jj,eps); eps=10^(-5); @@ -6042,7 +6079,7 @@ Crv3onsfparadataC(nm,crv3d,sfbd,fd):= Crv3onsfparadataC(nm,crv3d,sfbd,fd,options):= Crv3onsfparadataC(nm,crv3d,sfbd,fd,options,["do"]); Crv3onsfparadataC(nm,crv3d,sfbdorg,fdorg,optionorg,optionshorg):=( -//help:Crv3onsfparadata("1","sc3","sfbd3d1",fd); +//help:Crv3onsfparadata("1","sc3","sfbd3d1",fd,,nohiddenoptions,hiddenoptions); regional(funnm,sfbd,fd,options,optionsh,name3,name3h,name2,name2h,waiting, eqL,reL,strL,fname,tmp,tmp1,tmp2,flg,wflg,flg,ii,jj,eps,cmdflg); tmp1=replace(crv3d,"3d","2d"); @@ -6197,7 +6234,7 @@ Crv2onsfparadataC(nm,crv2d,sfbd,fd):= Crv2onsfparadataC(nm,crv2d,sfbd,fd,options):= Crv2onsfparadataC(nm,crv2d,sfbd,fd,options,["do"]); Crv2onsfparadataC(nm,crv2d,sfbd,fdorg,options,optionsh):=( -//help:Crv2onsfparadata("1","gp1","sfbd3d1",fd); +//help:Crv2onsfparadata("1","gp1","sfbd3d1",fd,nohiddenoptions,hiddenoptions); regional(fd,uname,vname,str,tmpfun,ii,jj,crv3d,tmp,tmp1,tmp2); Changestyle3d(crv2d,["nodisp"]); crv3d=crv2d+"3d"; @@ -6230,7 +6267,7 @@ WireparadataC(nm,sfbd,fd,wr1,wr2):= WireparadataC(nm,sfbd,fd,wr1,wr2,options):= WireparadataC(nm,sfbd,fd,wr1,wr2,options,["do"]); WireparadataC(nm,sfbd,fdorg,wr1,wr2,optionorg,optionshorg):=( -//help:Wireparadata("1","sfbd3d1",fd,5,5); +//help:Wireparadata("1","sfbd3d1",fd,5,5,nohiddenoptions,hiddenoptions); regional(funnm,fd,options,optionsh,name2,name3,name2h,name3h,waiting, eqL,reL,strL,fname,fnameh,tmp,tmp1,tmp2,flg,wflg,flg,ii,jj,eps,udata,vdata,cmdflg); eps=10^(-5); @@ -6544,7 +6581,7 @@ SfcutparadataC(nm,cutfunL,sfbd,fd):=(//180505 SfcutparadataC(nm,cutfunL,sfbd,fd,options):= SfcutparadataC(nm,cutfunL,sfbd,fd,options,["nodisp"]); SfcutparadataC(nm,cutfunLorg,sfbd,fdorg,optionorg,optionshorg):=( -//help:Sfcutparadata("1","2*x+3*y+z=1","sfbd3d",fd); +//help:Sfcutparadata("1","2*x+3*y+z=1","sfbd3d",fd,nohiddenoptions,hiddenoptions); regional(funnm,cutfunL,fd,options,optionsh,name2,name3,name2h,name3h, waiting,eqL,reL,strL,fname,fnameh,tmp,tmp1,tmp2,flg,wflg,flg,ii,jj,eps,cmdflg); eps=10^(-5); diff --git a/Master/texmf-dist/scripts/ketcindy/ketlib/ketpiccurrent_reptikz.r b/Master/texmf-dist/scripts/ketcindy/ketlib/ketpiccurrent_reptikz.r new file mode 100644 index 00000000000..bce6137fea1 --- /dev/null +++ b/Master/texmf-dist/scripts/ketcindy/ketlib/ketpiccurrent_reptikz.r @@ -0,0 +1,562 @@ +# Copyright (C) 2014 Setsuo Takato, KETCindy Japan project team +# +#This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/> + + +######################################### + +ThisVersion<- "2ev5_2_4(180930)" + +# 20180930 +# Drwpt debugged ( the last newline added) +# 20180929 +# Shade changed (Kyoukai => Joincrvs) +# 2017.10.28 +# Drwpt debugged ( Flattenlist ) +# 2017.10.07 +# Dottedline,Drwline,Drwpt,Makehasen,Beginpicture,Setpen,Shade + +############################################# + +Dottedline<- function(...) +{ + varargin <- list(...) + Nall <- length(varargin) + Nagasa <- 0.1 + Ookisa <- PenThick*2 #17.10.07 + I <- Nall + Tmp <- varargin[[I]] + while (mode(Tmp)=="numeric" && length(Tmp)==1 ) { + I <- I-1 + Tmp <- varargin[[I]] + } + if (I==Nall-1) { + Nagasa<-Nagasa*varargin[[Nall]] + Nall <- Nall-1 + } + if (I==Nall-2) { + Nagasa <- Nagasa*varargin[[Nall-1]] + Ookisa <- round(Ookisa*varargin[[Nall]]) + Nall <- Nall-2 + } + Nagasa <- 1000/2.54/MilliIn*Nagasa + Ra=Ookisa/MilliIn + for (N in 1:Nall) { + Pdata <- varargin[[N]] + if (mode(Pdata)=="numeric") { + Pdata <- list(Pdata) + } + for (II in 1:length(Pdata)) { + Clist <- MakeCurves(Op(II,Pdata)) + DinM <- Dataindex(Clist) + Mojisu=0 + for (n in Looprange(1,Nrow(DinM))) { + Tmp <- DinM[n,] + Data <- Clist[Tmp[1]:Tmp[2],] + Len <- 0 + Lenlist <- c(0) + for (I in Looprange(2,Nrow(Data))) { + Len <- Len+Norm(Data[I,]-Data[I-1,]) + Lenlist <- c(Lenlist,Len) + } + Lenall <- Lenlist[length(Lenlist)] + if (Lenall==0) { + next + } + Naga <- Nagasa + Nten <- round(Lenall/Naga)+1 + if (Nten > 1) { + Seg <- Lenall/(Nten-1) + } + else { + Seg <- Lenall + } + Eps <- 10^(-6)*Seg + PPd<-c() + Hajime <- 1 + for (I in Looprange(0,Nten-1)) { + Len <- Seg*I + if (I>0) { + J <- Hajime + while( Len>=Lenlist[J]+Eps) { + J <- J+1 + } + Hajime <- J-1 + } + T <- (Len-Lenlist[Hajime])/ + (Lenlist[Hajime+1]-Lenlist[Hajime]) + P <- Data[Hajime,]+T*(Data[Hajime+1,]-Data[Hajime,]) + PPd<-Appendrow(PPd,P) + if (I==Nten-1) { + if (Norm(P-Data[1,])<Eps) { + next + } + } + } + for (I in Looprange(1,Nrow(PPd))){ + P<- Op(I,PPd) + if (Nrow(PPd)==1){ + V<- c(1,0) + } + else if (I==1){ + Tmp<- Op(I+1,PPd)-P + V<- 1/Norm(Tmp)*Tmp + } + else if (I==Nrow(PPd)){ + Tmp<- P-Op(I-1,PPd) + V<- 1/Norm(Tmp)*Tmp + } + else{ + Tmp1<- Op(I+1,PPd)-P + Tmp2<- P-Op(I-1,PPd) + Tmp3<-1/Norm(Tmp1)*Tmp1+1/Norm(Tmp2)*Tmp2 + V<- 1/Norm(Tmp3)*Tmp3 + } + X=sprintf('%5.5f',P[1]) + Y=sprintf('%5.5f',P[2]) + Str=paste('\\put(',X,',',Y,'){\\circle*{',sprintf('%6.6f',Ra),'}}',sep="") + cat(Str,file=Wfile,append=TRUE) + Mojisu=Mojisu+nchar(Str) + if(Mojisu>80){ + cat("\n",file=Wfile,append=TRUE) + Mojisu=0 + } + } + } + } + if(Mojisu>0){ + cat("\n",file=Wfile,append=TRUE) + } + } + Tmp<-PenThick/PenThickInit + Setpen(Tmp) +} + + +########################################### + +Drwline<-function(...) +{ + varargin<-list(...) + Nall<-length(varargin) + Thick<-0 + Tmp<-varargin[[Nall]] + if (mode(Tmp)=="numeric" && length(Tmp)==1){ + Setpen(Tmp) + Nall<-Nall-1 + } + for (N in 1:Nall){ + Pdata<-varargin[[N]] + if (length(Pdata)==0) next + if (mode(Pdata)!="list") Pdata<-list(Pdata) + while(Mixtype(Pdata)==3){ + Tmp1<- list() + for(II in Looprange(1,length(Pdata))){ + Tmp1<- Mixjoin(Tmp1,Pdata[[II]]) + } + Pdata<- Tmp1 + } + for (II in Looprange(1,length(Pdata))){ + Clist<-MakeCurves(Pdata[[II]]) + DinM<-Dataindex(Clist) + for (n in Looprange(1,Nrow(DinM))){ + Tmp<-DinM[n,] + Data<-Clist[Tmp[1]:Tmp[2],] + Mojisu<-0 + for (I in Looprange(1,Nrow(Data))){ + Tmp<-Data[I,] + X=sprintf('%5.5f',Tmp[1]) + Y=sprintf('%5.5f',Tmp[2]) + Pt=paste('(',X,',',Y,')',sep="") + if(I==1){ + Str=paste('\\polyline',Pt,sep="") + }else{ + Str=Pt + } + cat(Str,file=Wfile,append=TRUE) + Mojisu<-Mojisu+nchar(Str) + if (Mojisu>80){ + cat("%\n",file=Wfile,append=TRUE) + Mojisu<-0 + } + } + if (Mojisu!=0){ + cat("%\n",file=Wfile,append=TRUE) + } + cat("%\n",file=Wfile,append=TRUE) + } + } + } + if (Thick>0){ + Tmp<-PenThick/PenThickInit + Setpen(Tmp) + } +} + +########################################### + +Drwpt<-function(...) +{ + varargin<-list(...) + Nargs<-length(varargin) + All=Nargs + if (TenSize>TenSizeInit){ + N<- round(6*sqrt(TenSize/TenSizeInit)) + } + else{ + N<-4 + } + Tmp<- varargin[[All]] + Iro=c(0,0,0,1) + Iroflg=0 + if(is.character(Tmp)){ + Iro=Ratiocmyk(Tmp) + Iroflg=1 + All=All-1 + } + Tmp<- varargin[[All]] + if (mode(Tmp)=="numeric"){ + if (length(Tmp)>1){ + Kosa<- 1; All<- Nargs + } + else{ + Kosa<- Tmp; All<- All-1 + } + } + else if (mode(Tmp)=="list"){ + Kosa<- 1; All<- Nargs + } + Ra=TenSize*1000/2.54/MilliIn + if(Iroflg>0){ + Str='{\\color[cmyk]{' + for(J in 1:4){ + Str=paste(Str,as.character(Kosa*Iro[J]),sep="") + if(J<4){ + Str=paste(Str,',',sep="") + } + } + Str=paste(Str,'}%',sep="") + cat(Str,file=Wfile,append=TRUE) + } + +# CL<-c() +# for (J in 0:N){ +# Tmp<- TenSize*0.5*1000/2.54/MilliIn +# Tmp<- Tmp*c(cos(pi/4+J*2*pi/N),sin(pi/4+J*2*pi/N)) +# CL<- append(CL,Tmp) +# } +# CL<- matrix(CL,nrow=2) +# CL<- t(CL) + Mojisu=0 + for (II in Looprange(1,All)){ + MS<- varargin[[II]] + MS=Flattenlist(MS) #17.10.28 + if (mode(MS)=="numeric"){ + MS<- list(MS) + } + for (I in Looprange(1,length(MS))){ + P<- MS[[I]] + if (InWindow(P)!="i") next + P<- Doscaling(P) + X=sprintf('%5.5f',P[1]) + Y=sprintf('%5.5f',P[2]) + Str=paste('\\put(',X,',',Y,'){\\circle*{',sprintf('%6.6f',Ra),'}}',sep="") + cat(Str,file=Wfile,append=TRUE) + Mojisu=Mojisu+nchar(Str) + if(Mojisu>80){ + cat("\n",file=Wfile,append=TRUE) + Mojisu=0 + } + } + } + Str="%" + if(Iroflg>0){ + Str='}%' + } + if(Mojisu>0){ + Str=paste('\n',Str,'\n',sep="") + }else{ + Fmt=paste(Str,'\n',sep="") + } + cat(Str,file=Wfile,append=TRUE) + cat("\n",file=Wfile,append=TRUE) #180930 +} + + +###################################### + +Makehasen<- function(Figdata,Sen,Gap,Ptn) +{ + Eps<- 10.0^(-6) + Clist<- MakeCurves(Figdata) + DinM<- Dataindex(Clist) + for (N in Looprange(1,Nrow(DinM))){ + Tmp<- DinM[N,] + Data<- Clist[Tmp[1]:Tmp[2],] + Dtall<- Nrow(Data) + Len<- 0 + Lenlist<- c(0) + for (I in Looprange(2,Dtall)){ + Len<- Len+Norm(Data[I,]-Data[I-1,]) + Lenlist<- c(Lenlist,Len) + } + Lenall<- Lenlist[Dtall] + if (Lenall==0){ + next + } + Kari<- (Sen+Gap)*0.1 + Naga<- Sen*0.1 + Tobi<- Gap*0.1 + if (Norm(Data[1,]-Data[Dtall,])<Eps){ + Nsen<- max(ceiling(Lenall/Kari),3) + SegUnit<- Lenall/Nsen + Naga<- SegUnit*Sen/(Sen+Gap) + Tobi<- SegUnit*Gap/(Sen+Gap) + SegList<- c(seq(0,(Nsen-1)*SegUnit,by=SegUnit)) + } + else{ + if (Ptn==0){ + Nsen<- max(ceiling((Lenall+Tobi)/Kari),3) + SegUnit<- Lenall*(Sen+Gap)/(Nsen*Sen+(Nsen-1)*Gap) + Naga<- SegUnit*Sen/(Sen+Gap) + Tobi<- SegUnit*Gap/(Sen+Gap) + SegList<- c(seq(0,(Nsen-1)*SegUnit,by=SegUnit)) + } + else{ + Nsen<- max(ceiling((Lenall+Naga)/Kari),3) + SegUnit<- Lenall*(Sen+Gap)/((Nsen-1)*Sen+Nsen*Gap) + Naga<- SegUnit*Sen/(Sen+Gap) + Tobi<- SegUnit*Gap/(Sen+Gap) + SegList<- c(seq(Tobi,Tobi+(Nsen-2)*SegUnit,by=SegUnit)) + } + } + Hajime<- 1; Owari<- 1 + Mojisu<- 0 + for (I in Looprange(1,length(SegList))){ + Len<- SegList[I] + J<- Owari + while (Len>=Lenlist[J]-Eps){ + if (J==Dtall){ + break + } + J<- J+1 + } + Hajime<- J-1 + J<- Hajime + while (Len+Naga>Lenlist[J]-Eps){ + if (J==Dtall){ + break + } + J<- J+1 + } + Owari<- J-1 + T<- (Len-Lenlist[Hajime]) + T<- T/(Lenlist[Hajime+1]-Lenlist[Hajime]) + P<- Data[Hajime,]+T*(Data[Hajime+1,]-Data[Hajime,]) + X0=sprintf('%5.5f',P[1]) + Y0=sprintf('%5.5f',P[2]) + Pt0=paste('(',X0,',',Y0,')',sep="") + Str=paste('\\polyline',Pt0,sep="") + cat(Str,file=Wfile,append=TRUE) + Mojisu<- Mojisu+nchar(Str) + for (J in Looprange(Hajime+1,Owari)){ + P=Data[J,] + X=sprintf('%5.5f',P[1]) + Y=sprintf('%5.5f',P[2]) + Pt=paste('(',X,',',Y,')',sep="") + Str=Pt + cat(Str,file=Wfile,append=TRUE) + Pt0=Pt + Mojisu=Mojisu+nchar(Str) + } + T<- (Len+Naga-Lenlist[Owari]) + T<- T/(Lenlist[Owari+1]-Lenlist[Owari]) + P<- Data[Owari,]+T*(Data[Owari+1,]-Data[Owari,]) + X=sprintf('%5.5f',P[1]) + Y=sprintf('%5.5f',P[2]) + Pt=paste('(',X,',',Y,')',sep="") + Str=Pt + cat(Str,file=Wfile,append=TRUE) + Mojisu<- Mojisu+nchar(Str) + if (Mojisu>80){ + cat("%\n",file=Wfile,append=TRUE) + Mojisu<- 0 + } + } + } + cat("%\n%\n",file=Wfile,append=TRUE); +} + +######################################### + +Beginpicture<-function(ul) +{ ## Scaling is implemented + Tmp<- Doscaling(c(XMIN,YMIN)) + Xm<- Tmp[1] + Ym<- Tmp[2] + Tmp<- Doscaling(c(XMAX,YMAX)) + XM<- Tmp[1] + YM<- Tmp[2] + Dx<- XM-Xm + Dy<- YM-Ym + Sym<-".0123456789 +-*/" + SL<-Sym + OL<-"+-*/" + if (ul!=""){ + ULEN<<-ul; + } + Is<-1; + VL<-""; + Ucode<-ULEN + for (I in Looprange(1,nchar(Ucode))){ + C<-substring(Ucode,I,I); + if (length(grep(C,SL,fixed=TRUE))>0){ + if (length(grep(C,OL,fixed=TRUE))>0){ + Tmp<-substring(Ucode,Is,I-1); + Str<-paste(VL,Tmp,C,sep="") + VL<-Str + Is<-I+1; + } + } + else{ + Unit<-substring(Ucode,I,I+1); + Str<-substring(Ucode,Is,I-1); + VL<-paste(VL,Str,sep="") + break; + } + } + Valu<-eval(parse(text=VL)); + Str<-as.character(Valu); + ULEN<<- paste(Str,Unit,sep=""); + if (Unit=="cm") MilliIn<<-1000/2.54*Valu + if (Unit=="mm") MilliIn<<-1000/2.54*Valu/10 + if (Unit=="in") MilliIn<<-1000*Valu + if (Unit=="pt") MilliIn<<-1000/72.27*Valu + if (Unit=="pc") MilliIn<<-1000/6.022*Valu + if (Unit=="bp") MilliIn<<-1000/72*Valu + if (Unit=="dd2") MilliIn<<-1000/1238/1157/72.27*Valu + if (Unit=="cc") MilliIn<<-1000/1238/1157/72.27*12*Valu; + if (Unit=="sp") MilliIn<<-1000/72.27/65536*Valu/10 + MARKLEN<<- MARKLENNow*1000/2.54/MilliIn; + Str<-paste("{\\unitlength=",ULEN,"%\n",sep=""); + cat(Str,file=Wfile,append=TRUE); + cat("\\begin{picture}%\n",file=Wfile,append=TRUE); + Str<-"("; + Tmp<-as.character(round(Dx,digits=6)); + Str<-paste(Str,Tmp,",",sep=""); + Tmp<-as.character(round(Dy,digits=6)); + Str<-paste(Str,Tmp,")(",sep=""); + Tmp<-as.character(round(Xm,digits=6)); + Str<-paste(Str,Tmp,",",sep=""); + Tmp<-as.character(round(Ym,digits=6)); + Str<-paste(Str,Tmp,")%\n",sep=""); + cat(Str,file=Wfile,append=TRUE); + Str=paste('\\linethickness{',as.character(PenThickInit/1000),'in}%',sep="") + cat(Str,file=Wfile,append=TRUE) + cat("%\n",file=Wfile,append=TRUE) +} + +######################################### + +Setpen<-function(Width) +{ + PenThick<<-round(PenThickInit*Width) + Str=paste('\\linethickness{',as.character(PenThick/1000),'in}%',sep="") + cat(Str,file=Wfile,append=TRUE) + cat("%\n",file=Wfile,append=TRUE) +} + +######################################### + +Shade<- function(...) +{ ## Scaling is implemented + varargin<- list(...) + Nargs<- length(varargin) + Iroflg=0 + if(Nargs>1){ + Iro=varargin[[Nargs]] + if(is.character(Iro)){ + Iroflg=1 + if(length(grep("{",Iro,fixed=TRUE))>0){ + Str=paste("{\\color",Iro,sep="") + } + else{ + Str=paste("{\\color{",Iro,"}",sep="") + } + } + else{ + if(length(Iro)==1){ + Kosa=Iro + } + else{ + Iroflg=1 + if(length(Iro)==4){ + Str="{\\color[cmyk]{" + } + else{ + if(length(Iro)==3){ + Str="{\\color[rgb]{" + } + } + for(J in 1:length(Iro)){ + Str=paste(Str,as.character(Iro[J]),sep="") + if(J<length(Iro)){ + Str=paste(Str,",") + } + } + Str=paste(Str,"}") + } + } + if(Iroflg==1){ + Str=paste(Str,"%\n",sep="") + cat(Str,file=Wfile,append=TRUE) + } + } + Mojisu=0 + Tmp=varargin[[1]] +# Data=Kyoukai(Tmp) + Data= Joincrvs(Tmp) #180929from + Data=list(Data) #180929to + for (I in Looprange(1, length(Data))){ + PL<- Op(I,Data) + PL=Appendrow(PL,Op(1,PL)) #180929 + Mojisu<- 0 + for (J in 1:Nrow(PL)){ + P<- Doscaling(Op(J,PL)) + X=sprintf('%5.5f',P[1]) + Y=sprintf('%5.5f',P[2]) + Pt=paste('(',X,',',Y,')',sep="") + if(J==1){ + Str=paste('\\polygon*',Pt,sep="") + }else{ + Str=Pt + } + cat(Str,file=Wfile,append=TRUE) + Mojisu<- Mojisu+nchar(Str) + if (Mojisu>80){ + cat("%\n",file=Wfile,append=TRUE) + Mojisu<- 0 + } + } + } + if(Iroflg==1){ + Str='}%' + if(Mojisu>0){ + Str=paste('\n',Str,'\n',sep="") + }else{ + Str=paste(Str,'\n') + } + cat(Str,file=Wfile,append=TRUE) + } +} diff --git a/Master/texmf-dist/scripts/ketcindy/template2slide.cdy b/Master/texmf-dist/scripts/ketcindy/template2slide.cdy Binary files differindex b4e955f5dc6..223c67406b6 100644 --- a/Master/texmf-dist/scripts/ketcindy/template2slide.cdy +++ b/Master/texmf-dist/scripts/ketcindy/template2slide.cdy diff --git a/Master/texmf-dist/scripts/ketcindy/template3Dfigure.cdy b/Master/texmf-dist/scripts/ketcindy/template3Dfigure.cdy Binary files differindex 068aa2833f8..ec10c6f34e5 100644 --- a/Master/texmf-dist/scripts/ketcindy/template3Dfigure.cdy +++ b/Master/texmf-dist/scripts/ketcindy/template3Dfigure.cdy |