dickchenlm 发表于 2021-3-28 17:55:52

求教一个几何作图题

求教一个几何作图题

dickchenlm 发表于 2021-3-28 17:58:18

这个题目如果用有几何约束的Solidworks等做,非常简单,但纯CAD作图,颇有难度,故求教。

dickchenlm 发表于 2021-3-30 14:36:09

题中射线OA和水平线DB为定直线,就是说角度ADB是已知的。有网友提示设OA=OB=r,在三角形ADB中用余弦定理解出r,可我还是不会。

zhy307501169 发表于 2021-4-5 13:53:29

在O点画一个直径为AB的圆,由A点向圆做切线(捕捉切点),然后复制切线到O点。完成

dickchenlm 发表于 2021-4-6 12:08:50

本帖最后由 dickchenlm 于 2021-4-6 12:23 编辑

zhy307501169 发表于 2021-4-5 13:53
在O点画一个直径为AB的圆,由A点向圆做切线(捕捉切点),然后复制切线到O点。完成
谢谢回答!但A点怎么确定呢?OA为定直线,OA方位已知,但OA长度是未知的。

chenjun_nj 发表于 2021-5-14 09:39:10

解出来也不是可尺规作图的。

highflybird 发表于 2021-5-18 21:53:56

本帖最后由 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)

highflybird 发表于 2021-5-18 21:55:16

关于一元四次方程的解及其函数请参考如下链接:
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=99844&highlight=%B8%B4%CA%FD
页: [1]
查看完整版本: 求教一个几何作图题