mmh1 发表于 2010-6-16 13:49:00

[讨论]画四边形如何改进



(defun c:4j()
(setq pa (getpoint "\n 请输入三角形左下角点:"))
(setq da (getreal "\n 请输入三角形底边:"))
(setq db (getreal "\n 请输入三角形第二边:"));请输入三角形第二边:与"之间不能有空格,否则输入错误。
(setq dc (getreal "\n 请输入三角形第三边:"))
(setq de (getreal "\n 请输入三角形第四边:"))
(setq dd (getreal "\n 请输入三角形第五边:"))
(setq s (/ (+ da db dc) 2))             ;求S=(da+db+dc)/2
(setq earea (sqrt (* s (- s da) (- s db) (- s dc))));求面积area=s*(s-da)*(s-db)*(s-dc)^0.5
(setq h(/ (* 2 earea) da))               ;求三角形高 h=2*area/da

(setq pab (sqrt (-(* dc dc) (* h h))))      ;求高将底边分成的两部分的长度
(setq pba (sqrt (-(* db db) (* h h))))
(cond ((and(< pab pba) (> pba da)) (setq angb (atan (/ h pab))) (setq angfinal (- pi angb)))
      ((and(> pab da) (> pab pba)) (setq angb (atan (/ h pab))) (setq angfinal angb))
      ((and(< pab da) (< pba da))(setq angb (atan (/ h pab))) (setq angfinal angb))
)

(setq s1 (/ (+ de db dd) 2))             ;求S=(da+db+dc)/2
(setq earea1 (sqrt (* s1 (- s1 db) (- s1 de) (- s1 dd))));求面积area=s*(s-da)*(s-db)*(s-dc)^0.5
(setq h1(/ (* 2 earea1) db))               ;求三角形高 h=2*area/da

(setq pac (sqrt (-(* dd dd) (* h1 h1))))      ;求高将底边分成的两部分的长度
(setq pca (sqrt (-(* de de) (* h1 h1))))
(cond ((and(< pab pba) (> pba da)) (setq angb1 (atan (/ h pba))) (setq angfinal2 angb1))
      ((and(> pab da) (> pab pba)) (setq angb1 (atan (/ h pba))) (setq angfinal2 (- pi angb1)))
      ((and(< pab da) (< pba da))(setq angb1 (atan (/ h pba))) (setq angfinal2 angb1))
)
(cond ((and(< pac pca) (> pca db)) (setq angc (atan (/ h1 pca))) (setq angfinal1 angc))
      ((and(> pac db) (> pac pca)) (setq angc (atan (/ h1 pca))) (setq angfinal1 (- pi angc)))
      ((and(< pac db) (< pca db))(setq angc (atan (/ h1 pca))) (setq angfinal1 angc))
)
(setq ang1 (+ angfinal2 angfinal1))
(setq ang2 (- pi ang1))
(setq pb (polar pa 0 da))       ;求pb点
(setq pc (polar pa angfinal dc))
(setq pg (polar pb ang2 de))
(command "line" pa pb"")
(command "line" pb pc"")
(command "line" pc pa"")
(command "line" pc pg"")
(command "line" pb pg"")
(princ ang1)
)


通过网上的代码修改成四边形的

如何简化?

有人提出说可以用圆,不过不会取 交点

黑色钢琴 发表于 2010-6-16 14:06:00

lenlenq 发表于 2010-6-17 21:30:00

&nbsp;不明白楼主的意思。<br/>直接点点就行了<br/>(defun&nbsp;&nbsp;&nbsp; c:4j ()<br/>&nbsp;&nbsp; (setq pa (getpoint "\n 请输入四边形第一个角点:"))<br/>&nbsp;&nbsp; (setq pb (getpoint pa"\n 请输入四边形第二个角点:"))<br/>&nbsp;&nbsp; (setq pc (getpoint pb"\n 请输入四边形第三个角点:"))<br/>&nbsp;&nbsp; (setq pd (getpoint pc"\n 请输入四边形第四个角点:"))<br/>&nbsp;&nbsp; (command "line" pa pb pc pd "c")<br/>&nbsp;&nbsp; (princ)<br/>&nbsp; )<br/>

露水2 发表于 2010-6-18 23:05:00

我的第一个程序就是四边形

Daniel·邓邓邓 发表于 2012-7-12 16:17:49

露水2 发表于 2010-6-18 23:05 static/image/common/back.gif
我的第一个程序就是四边形

悄悄给我看看你的程序吧。

zml84 发表于 2012-7-12 17:21:22

http://zml84.blog.sohu.com/55989437.htmlhttp://115.img.pp.sohu.com/images/blog/2007/8/1/9/18/114b8939ab4.jpg

yshf 发表于 2012-7-12 18:38:32


;画四边形yshf
;以四边形对角线的第一点为准,四条边顺时针排列
(defun c:4b()
    (defun jj(a b c / p s h)
       (setq p (* 0.5 (+ a b c))
             s (sqrt (* p (- p a) (- p b) (- p c)))
             h (/ (* 2.0 s) c)
             d (sqrt (- (* a a) (* h h)))
             p (atan h d)
       )
    )

    (setq cm (getvar "cmdecho")
          os (getvar "osmode")
    )
    (setvar "cmdecho" 0)
    (setvar "osmode" 33)
    (while (setq p1 (getpoint "\n四边形对角线的第一点<回车退出>:"))
      (if (setq p3 (getpoint p1 "\n四边形对角线的另一点所在方向:"))
          (if (and (setq djx (getdist "\n四边形对角线长度:"))
                   (setq a1 (getdist "\n四边形第1条边长度:"))
                     (setq b1 (getdist "\n四边形第2条边长度:"))
                     (setq a2 (getdist "\n四边形第3条边长度:"))
                     (setq b2 (getdist "\n四边形第4条边长度:"))
                )
                (progn
                  (setq aa (angle p1 p3)
                          p3 (polar p1 aa djx)
                        p2 (polar p1 (+ aa (jj a1 b1 djx)) a1)
                          p4 (polar p1 (- aa (jj b2 a2 djx)) b2)
                    )
                  (setvar "osmode" 0)
                  (command "_pline" p1 p2 p3 p4 "c")
                )
           )
        )
      (setvar "osmode" 33)
    )
    (setvar "osmode" os)
    (setvar "cmdecho" cm)
    (princ)                          
)

bobojames-one 发表于 2015-6-17 11:16:02

yshf 发表于 2012-7-12 18:38 static/image/common/back.gif


给力,很好用
页: [1]
查看完整版本: [讨论]画四边形如何改进