本人需要在扫描出的多条极化曲线中做出每条曲线的水平切线和斜向切线,网上查阅了大量方法,有些可以用,有些可能是由于版本等原因不能奏效,下面是总结网友提供的方法并结合自己的实践而形成的做法,仅供参考,同时对那些提供方法的网友表示感谢。本人使用的版本为originPro 8。
一.一条切线的做法
斜率的简单求法:Analysis-Calculus-Differentiate
一条曲线的做法很简单,不赘述,详见:
二.多条切线的做法
方法1:(参考资料:百度文库“ORIGIN使用中常见的问题”)
引用:“利用ORIGIN提供的免费插件,可方便地作任何一点的切线(详见1中一条切线的做法),若要作多条切线应当将第一条切线的数据另到一个新的数据表格中,因为该插件在生成新切线时会将原来的数据覆盖掉”。“另到一个新的数据表格中”,这句话明显不完整,我复制或者剪切到New Column,亦或将数据复制或者剪切到新建Worksheet中均不行,仍然是一条做出来后,去做第2条时第1条的数据被覆盖了,导致第1条切线消失。
方法2:应用图层(参考资料:http://bit.ly/1epabJY)
本人感觉来回复制图层、手动调节复制后图层的位置太为繁琐,该法可以“做出”多条切线的目的,但这个做出是带引号的,并非真正通过origin做出的。
方法3:应用脚本代码(强烈推荐,屡试不爽)
按照该网友提供的脚本代码复制到脚本窗口,执行命令后没有成功,于是参阅资料后在此基础上做了调整后成功了,具体如下:
(1)在Origin界面中使用快捷键ALT+3,打开脚本窗口,下图红框内,鼠标点击小红箭头尾部的光标处(蓝色符号>>的后面)就是下一步要复制代码的地方。(第一次代开脚本窗口可能是在这个窗口左边还有个Find窗口,无需理会或者关闭即可。)
(2)复制如下代码至刚打开的脚本窗口,回车执行命令,此时Data Reader Tool会被激活,鼠标指针变成十字方框,用此工具选择图像中的任意一点,双击后切线将自动生成。
(注意:代码复制一定要完整,不要更改,最后一行括号和分号也是代码的一部分)
dotool 3; // Data Reader tool def pointproc { dotool -q; %b=xof(%c); // X dataset for the current one p1=(%C[index+1]-%C[index])/(%b[index+1]-%b[index]); p2=(%C[index]-%C[index-1])/(%b[index]-%b[index-1]); p=(p1+p2)/2; c=y-p*x; ftang(x)=$(p)*x+$(c); layer -i200 ftang; // Plot as Line... set ftang -c 4; // ...in blue };
(3)第2、3、4条切线的做法
还是将上述代码复制到蓝色》后面,但是此时先不要回车,将两个小红方框内的ftang后面输入2(其他ftang处不要改),两处都输入2后,将光标移动到最后一行分号的后面,再回车即可,在曲线上双击需要做切线的地方即可,双击后第一条切线变成了黑色,第二条曲线还是蓝色。
一定要看我将代码改动的地方,上图红框内红色实心方框处,其他地方无需改动。
(4)显而易见,做第三条切线时将2改为3即可,第四条将3改为4,以此类推。如下图4条切线多同时显示在同一数据图像内,切点击每条切线均可进行编辑、查看斜率、数据等操作。
懒汉模式:如果不想改代码,可以复制以下改好的代码执行(2)的步骤即可:
做第2条切线时的代码:
dotool 3; // Data Reader tool def pointproc { dotool -q; %b=xof(%c); // X dataset for the current one p1=(%C[index+1]-%C[index])/(%b[index+1]-%b[index]); p2=(%C[index]-%C[index-1])/(%b[index]-%b[index-1]); p=(p1+p2)/2; c=y-p*x; ftang2(x)=$(p)*x+$(c); layer -i200 ftang; // Plot as Line... set ftang2 -c 4; // ...in blue };
做第3条切线时的代码:
dotool 3; // Data Reader tool def pointproc { dotool -q; %b=xof(%c); // X dataset for the current one p1=(%C[index+1]-%C[index])/(%b[index+1]-%b[index]); p2=(%C[index]-%C[index-1])/(%b[index]-%b[index-1]); p=(p1+p2)/2; c=y-p*x; ftang3(x)=$(p)*x+$(c); layer -i200 ftang; // Plot as Line... set ftang3 -c 4; // ...in blue };
做第4条切线时的代码:
dotool 3; // Data Reader tool def pointproc { dotool -q; %b=xof(%c); // X dataset for the current one p1=(%C[index+1]-%C[index])/(%b[index+1]-%b[index]); p2=(%C[index]-%C[index-1])/(%b[index]-%b[index-1]); p=(p1+p2)/2; c=y-p*x; ftang4(x)=$(p)*x+$(c); layer -i200 ftang; // Plot as Line... set ftang4 -c 4; // ...in blue };via Chu's Space http://bit.ly/1Hrohl2