关于AutoCAD圆锥曲线的疑问
在圆锥曲线(椭圆,双曲线,抛物线)中,AutoCAD能直接做出的是椭圆。而AutoCAD可以做出圆锥体及圆锥曲线,Ahzhl兄曾经多次用这个来解题。
几年前我也学着用Vla-section命令来构建抛物线。代码见后。
可以看出,这种方法构建的抛物线是SPline。
我的疑问是: 能否直接用Spline绘制出部分的抛物线或者双曲线,Spline的数据结构是如何的。
是样条曲线,还是分段二次曲线,还是分段三次曲线,或者更复杂的曲线呢。
假如我们知道它的数据结构,是否直接可以通过构建几个关键点和起始点的切线方向,来得到一段精确的部分抛物线或者双曲线呢。
题外话,虽然椭圆和双曲线和抛物线相比属于封闭类曲线,但由于椭圆是尺规作图中无法直接应用的,那能够利用椭圆变化出双曲线或者抛物线来呢。
请不吝指点,谢谢。
代码- ;;;by qjchen; to draw parabola
- (defun c:test (/ *acad-object* *active-document*
- *model-space* ratio vl-p1
- vl-p2 vl-p3 vl-p4 vl-p5
- mycone cur a
- )
- (vl-load-com)
- (setq *acad-object* nil)
- (setq *active-document* nil)
- (setq *model-space* nil) ;(setq ratio (getreal "\n y=kx^2 k=?:"))
- (setq ratio 0.005)
- (setq vl-p1 (vlax-3d-point '(0 0 0)))
- (setq vl-p2 (vlax-3d-point '(1000 0 0)))
- (setq vl-p3 (vlax-3d-point '(1000 1000 0)))
- (setq vl-p4 (vlax-3d-point '(0 0 -500)))
- (setq vl-p5 (vlax-3d-point (list 0 0 (/ 0.5 ratio))))
- (setq mycone (vla-addcone (model-space) vl-p1 1000 1000))
- (vla-move mycone vl-p1 vl-p4)
- (vla-rotate3d mycone vl-p1 vl-p2 (/ pi 4))
- (vla-move mycone vl-p1 vl-p5)
- (setq cur (vla-sectionsolid mycone vl-p1 vl-p2 vl-p3))
- (vla-erase mycone)
- (vla-explode cur)
- (setq a (ssget "X"
- '((-4 . "<OR")
- (0 . "region")
- (0 . "line")
- (-4 . "OR>")
- )
- )
- )
- (command "erase" a "")
- (command "zoom" "e" "" "zoom" ".9x")
- )
- (defun acad-object ()
- (cond
- (*acad-object*)
- (t
- (setq *acad-object* (vlax-get-acad-object))
- )
- )
- )
- (defun active-document ()
- (cond
- (*active-document*)
- (t
- (setq *active-document* (vla-get-activedocument (acad-object)))
- )
- )
- )
- (defun model-space ()
- (cond
- (*model-space*)
- (t
- (setq *model-space* (vla-get-modelspace (active-document)))
- )
- )
- )
|