找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: newer

[研讨] 画出如图的蛇形LINE图形

[复制链接]

已领礼包: 1865个

财富等级: 堆金积玉

发表于 2016-10-21 22:32:31 | 显示全部楼层

我一看到英文长、参数多的代码我就头晕……
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8742个

财富等级: 富甲天下

发表于 2016-10-22 06:59:34 | 显示全部楼层
感谢分享程序,3Q!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2226个

财富等级: 金玉满堂

发表于 2016-10-23 10:51:46 | 显示全部楼层
本帖最后由 newer 于 2016-10-23 14:16 编辑
(defun c:tt (/ i lst lst1 lst2 lst-mid p0 x y z)
  (if (not *rr)
    (setq *rr 100.)
  )
  (if (not *nn)
    (setq *nn 11)
  )
  (if (not *ll)
    (setq *ll 10.)
  )
  (setq *rr (cond
              ((getdist (strcat "\n输入圆半径   <"
                                (vl-princ-to-string *rr) ">: "
                        )
               )
              )
              (*rr)
            )
  )
  (setq *nn (cond
              ((getdist (strcat "\n输入等分数量 <"
                                (vl-princ-to-string *nn) ">: "
                        )
               )
              )
              (*nn)
            )
  )
  (setq *ll (cond
              ((getdist (strcat "\n输入尖角水平距离 <"
                                (vl-princ-to-string *ll) ">: "
                        )
               )
              )
              (*ll)
            )
  )
  (setq p0 (getpoint "\n圆心插入点"))
  (if (and
        *rr
        *nn
        *ll
        p0
      )
    (progn
      (setq lst (dividex (list 0 *rr) (list 0 (* -1 *rr)) *nn)
            i 0
      )
      (setq lst (mapcar' (lambda (x)
                           (list (sqrt (abs (- (* *rr *rr) (* (cadr x)
                                                              (cadr x)
                                                           )
                                            )
                                       )
                                 ) (cadr x)
                           )
                         ) lst
                )
      )
      (setq lst-mid (reverse (cdr (reverse (cdr lst)))))
      (setq lst1 (mapcar' (lambda (x y z)
                            (setq i (1+ i))
                            (cond
                              ((and
                                 (null (equal (cadr x) 0 1e-6))
                                 (< (cadr x) 0)
                                 (= (rem i 2) 0)
                               )
                                (list x (list (* -1 (car y)) (cadr x)))
                              )
                              ((and
                                 (null (equal (cadr x) 0 1e-6))
                                 (< (cadr x) 0)
                                 (= (rem i 2) 1)
                               )
                                (list (list (* -1 (car x)) (cadr x))
                                      (list (car y) (cadr x))
                                )
                              )
                              ((and
                                 (null (equal (cadr x) 0 1e-6))
                                 (> (cadr x) 0)
                                 (= (rem i 2) 0)
                               )
                                (list (list (car z) (cadr x)) (list
                                                                    (* -1
                                                                       (car x)
                                                                    )
                                                                    (cadr x)
                                                              )
                                )
                              )
                              ((and
                                 (null (equal (cadr x) 0 1e-6))
                                 (> (cadr x) 0)
                                 (= (rem i 2) 1)
                               )
                                (list (list (* -1 (car z)) (cadr x)) x)
                              )
                              ((equal (cadr x) 0 1e-6)
                                (list (list *rr 0) (list (* -1 *rr) 0))
                              )
                            )
                          ) lst-mid (append
                                      (cdr lst-mid)
                                      (list (last lst))
                                    ) lst
                 )
      )
      (setq lst (apply
                  'append
                  lst1
                )
      )
      (setq lst1 (append
                   (list (list (caar lst) (* -1 *rr)))
                   lst
                   (list (list (car (last lst)) *rr))
                 )
      )
      (setq lst2 (apply
                   'append
                   (mapcar' (lambda (x)
                              (if (< (caar x) 0)
                                (list (car x) (polar (mid (car x)
                                                          (cadr x)
                                                     ) pi *ll
                                              ) (cadr x)
                                )
                                (list (car x) (polar (mid (car x)
                                                          (cadr x)
                                                     ) 0 *ll
                                              ) (cadr x)
                                )
                              )
                            ) (XD::List:GroupByNum lst1 2)
                   )
                 )
      )
      (if (= (rem *nn 2) 0)
        (setq lst2 (append
                     (list (list *rr (* -1 *rr)))
                     lst2
                     (list (list (* -1 *rr) *rr))
                   )
        )
        (setq lst2 (append
                     (list (list *rr (* -1 *rr)))
                     lst2
                     (list (list *rr *rr))
                   )
        )
      )
      (MK-LWPOLYLINE (mapcar' (lambda (x)
                                (polar x (angle (list 0 0 0) p0)
                                       (distance p0 (list 0 0 0))
                                )
                              ) lst2
                     )
      )
      (mkcir p0 *rr "0")
    )
  )
  (princ)
)
(defun MK-LWPOLYLINE (lst / p)
  (entmakex (append
              (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity")
                    (cons 100 "AcDbPolyline") (cons 90 (length lst))
              )
              (mapcar
                (function (lambda (p)
                            (cons 10 p)
                          )
                )
                lst
              )
            )
  )
)
(defun dividex (s e i / a r sl)
  (setq r (list s)
        a (angle s e)
        sl (/ (distance s e) i)               ;
  )
  (repeat (fix i)
    (setq r (cons (polar (car r) a sl) r))
  )
)

(defun XD::List:GroupByNum (lst num / ls ret)
  (if (= (rem (length lst) num) 0)
    (progn
      (setq ls nil)
      (repeat (/ (length lst) num)
        (repeat num
          (setq ls (cons (car lst) ls)
                lst (cdr lst)
          )
        )
        (setq ret (append
                    ret
                    (list (reverse ls))
                  )
              ls nil
        )
      )
    )
  )
  ret
)

(defun mkcir (pt r la)
  (entmakex (list '(0 . "CIRCLE") (cons 8 la) (cons 10 pt) (cons 40 r)
                  (cons 62 2)
            )
  )
)
(defun mid (p1 p2)
  (mapcar
    (function (lambda (e1 e2)
                (* (+ e1 e2) 0.5)
              )
    )
    p1
    p2
  )
)

评分

参与人数 1D豆 +50 贡献 +1 收起 理由
newer + 50 + 1 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1865个

财富等级: 堆金积玉

发表于 2016-10-23 12:15:08 | 显示全部楼层
本帖最后由 aimisiyou 于 2016-10-23 12:18 编辑

友情提示,试试运行半径500、等分40,尖角50的情况。好像当等分数为4的倍数时,会出现不符合要求的图形。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2016-10-23 14:01:07 | 显示全部楼层

搜狗截图20161023135822.png


等分数20的时候,出现这样的图形。再修改下代码。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2016-10-23 14:03:28 来自手机 | 显示全部楼层
首先这是一个对称图形,只要求1/4的点即可,圆心和半径及高度就可以求点
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2016-10-23 14:05:37 | 显示全部楼层

ST,试着写个代码啊,看下不同的算法。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2226个

财富等级: 金玉满堂

发表于 2016-10-23 14:10:15 | 显示全部楼层
精度的问题已修改!再看看!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2016-10-23 14:10:23 | 显示全部楼层

这个能不能用 递归  写出来? 试试?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2016-10-23 14:17:53 | 显示全部楼层

可以了,厉害。希望更多的朋友参与,看到不同的算法。

搜狗截图20161023141528.png
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2016-10-23 16:00:45 来自手机 | 显示全部楼层
本帖最后由 st788796 于 2016-10-23 16:02 编辑
newer 发表于 2016-10-23 14:17

感觉只要有第一象限就都有了, 基准就是水平的直径
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2016-10-23 16:14:51 来自手机 | 显示全部楼层
本帖最后由 st788796 于 2016-10-23 16:16 编辑

论坛的代码手机版(标准版)原来的功能还够用,升级后不成了,标准版没了,触屏版没有编辑功能
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2016-10-23 16:19:45 | 显示全部楼层

是指 贴 代码 吗? [code... 这个?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2016-10-23 17:15:42 来自手机 | 显示全部楼层
newer 发表于 2016-10-23 16:19

手机版下面的"标准版",功能够用,现在这个"标准版"飞了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2016-10-23 17:19:51 来自手机 | 显示全部楼层
现在只能用"触屏版"和"电脑版"
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-21 18:38 , Processed in 0.403998 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表