求教一个几何作图题
求教一个几何作图题 这个题目如果用有几何约束的Solidworks等做,非常简单,但纯CAD作图,颇有难度,故求教。 题中射线OA和水平线DB为定直线,就是说角度ADB是已知的。有网友提示设OA=OB=r,在三角形ADB中用余弦定理解出r,可我还是不会。 在O点画一个直径为AB的圆,由A点向圆做切线(捕捉切点),然后复制切线到O点。完成 本帖最后由 dickchenlm 于 2021-4-6 12:23 编辑zhy307501169 发表于 2021-4-5 13:53
在O点画一个直径为AB的圆,由A点向圆做切线(捕捉切点),然后复制切线到O点。完成
谢谢回答!但A点怎么确定呢?OA为定直线,OA方位已知,但OA长度是未知的。 解出来也不是可尺规作图的。 本帖最后由 highflybird 于 2021-5-18 22:01 编辑
诚如chenjun_nj所说,此问题的一般解是不可尺规作图解,因为得到一个一元四次方程:
下面是我用LISP解的结果。(把代码拷贝到LISP编辑器或者文本中,加载运行)
;;; 问题来源:http://bbs.mjtd.com/thread-183200-1-1.html
;;; 输入条件输出解,并画出图形。
(defun c:tt (/ p q l h m i j x y sx sy px dd an pp)
(initget 9)
(setq p (getpoint "\n定点O位置:"))
(initget 9)
(setq q (getpoint p "\n射线OA的另一点:"))
(initget 15)
(setq L (getdist q "\n输入线段AB的定长:"))
(initget 9)
(setq h (getpoint "\n点取水平线DB位置:"))
(setq m (polar h 0 1000))
(if (setq i (inters h m p q nil))
(progn
(setq j (mapcar '- p i))
(setq x (abs (car j)))
(setq y (abs (cadr j)))
(foreach s (GetSolutions x y L)
(setq sx (car s))
(setq sy (cadr s))
(if (and (equal sy 0 1e-8) (> sx 0))
(progn
(setq px (polar i 0 sx))
(setq dd (distance p px))
(setq an (angle p q))
(setq pp (polar p an dd))
(ent:make_line (trans p 1 0) (trans q 1 0))
(ent:make_line (trans px 1 0) (trans pp 1 0))
(ent:make_Xline (trans h 1 0) (trans '(1 0 0) 1 0 T))
)
)
)
)
(alert "你输入了无效的条件!")
)
(princ)
)
;;;-------------------------------------------------------------
;;; 通过定点相对坐标和定长得到一元四次方程。此方程的解为问题解。
;;; 关于一元四次方程的解及其相关函数,请参见下面的链接:
;;; http://bbs.mjtd.com/forum.php?mo ... hlight=%B8%B4%CA%FD
;;;-------------------------------------------------------------
(defun GetSolutions (x y L / xx yy xy k B C D E)
(setq xx (* x x))
(setq yy (* y y))
(setq xy (+ xx yy))
(setq k (/ (* xy l l) yy))
(setq B (+ x x))
(setq C (- xy k))
(setq D (* -2 x k))
(setq E (* K (- (* 0.25 L L) xy)))
(Math:quartic_Equation 1 B C D E)
)
;;;-------------------------------------------------------------
;;;创建一条直线段
;;;输入: 两个三维或者二维的点
;;;输出: 线段实体的图元名
;;;-------------------------------------------------------------
(defun Ent:make_line (p q)
(entmakex
(list
'(0 . "LINE")
(cons 10 p)
(cons 11 q)
)
)
)
;;;-------------------------------------------------------------
;;; 创建一条射线
;;; 输入: 射线通过的基点和方向矢量
;;; 输出: 创建后的射线图元名
;;;-------------------------------------------------------------
(defun Ent:make_xline (p v)
(entmakex
(list
'(0 . "XLINE")
'(100 . "AcDbEntity")
'(100 . "AcDbXline")
(cons 10 p)
(cons 11 v)
)
)
)
(vl-load-com)
(princ "\n运行命令: tt.")
(princ)
关于一元四次方程的解及其函数请参考如下链接:
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=99844&highlight=%B8%B4%CA%FD
页:
[1]