Highflybird 发表于 2020-9-13 00:36:49

圆锥曲线在AutoCAD的精确表达法

本帖最后由 Highflybird 于 2021-9-9 00:53 编辑

圆锥曲线有三类:椭圆、抛物线和双曲线。
椭圆在AutoCAD的画法为众人熟知,我现在说说剩下的两类。
1、抛物线。
如果熟悉三维建模的,可以创建一个三维的圆锥体,然后用section命令得到圆锥曲线的轮廓。
炸开这个轮廓,可以得到一个精确的圆锥曲线,这个方法有点费时,不好操作。
现在通过举例讲解抛物线的另一个画法。
画:y=a*x^2 ,区间段为(-1,1)。
输入命令:spline回车

当前设置: 方式=拟合   节点=弦
指定第一个点或 [方式(M)/节点(K)/对象(O)]: m         <-----在这里输入m
输入样条曲线创建方式 [拟合(F)/控制点(CV)] <拟合>: cv   <-----在这里输入CV
当前设置: 方式=控制点   阶数=3
指定第一个点或 [方式(M)/阶数(D)/对象(O)]: d      <-----在这里输入d
输入样条曲线阶数 <3>:                   <-----在这里输入2,形成2阶的样条曲线。                  
(上面的这些设置输入一次址后,CAD下次可以不用输入了)

当前设置: 方式=控制点   阶数=2
指定第一个点或 [方式(M)/阶数(D)/对象(O)]:
输入下一个点:                                 <-----捕捉第一点坐标为(-1,a)。
输入下一个点或 [放弃(U)]:               <-----捕捉第二点坐标为(0,-a)。
输入下一个点或 [闭合(C)/放弃(U)]:<-----捕捉第三点坐标为(1,a)。

回车。
这样就得到了一条抛物线,这是一条精确的抛物线,不是拟合出来的,读者可以自行验证。
其它形式的方程,均可由此平移和旋转变换得到。如果大家有兴趣,不妨参考相关知识。
譬如下面的链接:
https://zhuanlan.zhihu.com/p/91649187

2、双曲线。
双曲线与抛物线的画法类似,也是要设置为二阶样条曲线,方式为控制点的模式。
举例:画双曲线x^2-y^2=1,区间为(-2,2)
先画半边。
输入spline, 像抛物线那样设置,如果已经设置好了,回车即可。
要依次输入这三点,这三点坐标是A(2,sqrt(3)), C(0.5,0),B(2,-sqrt(3))
输入后,回车。
下面的步骤可能在属性里面操作容易写。
选取刚才形成的样条曲线,ctrl+1打开属性面板,在属性的当前控制点设置为2,即C点。
把权值-1修改为2,那么,这样就形成了右半边,镜像一下,得到左半边。
所需双曲线绘制完成。

上面的属性修改也可以用splinedit命令来完成
选择开始默认形成的样条曲线,输入splinedit或者双击。
命令: _splinedit
输入选项 [闭合(C)/合并(J)/拟合数据(F)/编辑顶点(E)/转换为多段线(P)/反转(R)/放弃(U)/退出(X)] <退出>: e
输入顶点编辑选项 [添加(A)/删除(D)/提高阶数(E)/移动(M)/权值(W)/退出(X)] <退出>: w
输入新权值 (当前值 = 1.00000000) 或 [下一个(N)/上一个(P)/选择点(S)/退出(X)] <下一个>:
输入新权值 (当前值 = 1.00000000) 或 [下一个(N)/上一个(P)/选择点(S)/退出(X)] <下一个>: 2   <-----在这里输入2,把第二点的权值修改为2。
输入新权值 (当前值 = 2.00000000) 或 [下一个(N)/上一个(P)/选择点(S)/退出(X)] <下一个>: x
输入顶点编辑选项 [添加(A)/删除(D)/提高阶数(E)/移动(M)/权值(W)/退出(X)] <退出>: x
输入选项 [闭合(C)/合并(J)/拟合数据(F)/编辑顶点(E)/转换为多段线(P)/反转(R)/放弃(U)/退出(X)] <退出>: x

分析:
由曲线方程可知,曲线经过(2,sqrt(3))和(2,-sqrt(3))两点,这两点可作为样条的两个端点。
经过计算,可知在点(2,sqrt(3))双曲线的切线斜率为2Xsqrt(3)/3,交X轴线于C(0.5,0)点,又可知曲线经过D(1,0)点
所以权值为DE/CD=1/0.5=2,因此控制点C的权值要输入2.

3、总结方法,
a、首先找到曲线的两个端点(一般做对称的好些,不对称区间可以用对称区间画出,后期用裁剪命令修剪)作为第一个控制点和第三个控制点。
b、第二点为首位两个端点的切线相交点。
c、计算和修改权值,得到需要曲线。权值大于1为双曲线,等于1为抛物线,小于1为椭圆。读者自行验证。

如果读者觉得步骤麻烦,可以用简单的LISP程序来生成。

4、关于证明,大家可以参考样条曲线的知识,经过验证,用三个控制点的时候,二阶样条曲线的方程表达完全一致。
有什么不足的地方请大家多多指教。
转载此文需标明原作者和来源。
后续,下面我补充对于一般的双曲线的画法(以a=5,b=3为例):


关于其原理不再赘述了。
另外利用LISP程序绘制抛物线和双曲线,请参考如下链接:
用LISP绘制精确的抛物线和双曲线

Highflybird 发表于 2020-9-13 11:35:15

后注:
通过研究,发现可以作出高阶的曲线,譬如作 在区间(0,1)上y=x^5的多项式曲线。
把区间(0,1)等分成5等分,用spline画样条曲线,阶数设置为5,
从原点开始,依次通过4个等分点,到达最后的控制点为(1,1),
这样就得到了所需曲线。

不过随着阶数的升高,精度会有所降低。不过依然可以达到一般需要。

Highflybird 发表于 2021-9-9 00:55:00

现增加双曲线的一般画法,并提供LISP绘制程序。
页: [1]
查看完整版本: 圆锥曲线在AutoCAD的精确表达法