找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2531|回复: 24

[每日一码] 判断是不是 点 ,点对,转换成2d 3d 4d ,以前写的,以后可能会用到

[复制链接]

已领礼包: 488个

财富等级: 日进斗金

发表于 2013-10-13 17:54:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

  1. <P>;;;===========================================
  2. ;;;listp and not nil
  3. (defun consp (lst) (not (atom lst)))
  4. ;;;点对?
  5. (defun dot-pair-p(lst / e)
  6.    (and (consp lst)
  7.         (progn (while(consp lst)(setq lst(cdr lst)))
  8.                (not(null lst))
  9.         )
  10.    )
  11. )
  12. ;;;是 点?
  13. (defun pointp(x / )
  14.   (and (listp x)
  15.        (not(dot-pair-p x))
  16.        (<= 2 (length x) 3)
  17.        (apply 'and (mapcar ' numberp x))
  18.   )
  19. )</P>
  20. <P>;;;=====================================</P>
  21. <P>;;;2005.8.25
  22. (defun 3d(p / x y)
  23. (if p(mapcar '(lambda(x y)x)(append p '(0. 0. 0.)) '(0. 0. 0.)))
  24. )
  25. (defun 2d(p / x y)
  26.     (if p(mapcar '(lambda(x y)x)(append p '(0. 0.)) '(0. 0.)))
  27. )
  28. (defun 4d(p / x y)
  29. (if(/= 4(length p))
  30.   (append (3d p) '(1.))
  31.   p
  32. )
  33. )</P>
以后可能会用到

评分

参与人数 1D豆 +5 收起 理由
xshrimp + 5 技术引导讨论和指点奖!

查看全部评分

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

已领礼包: 488个

财富等级: 日进斗金

 楼主| 发表于 2013-10-13 18:08:41 | 显示全部楼层
;;两个里面选一个非nil
(defun or2(a b)(cond(a)(b)))

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

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

 楼主| 发表于 2013-10-13 18:15:19 | 显示全部楼层
  1. ;;;=====================================================
  2. ;;;直线 m b
  3. (defun get-line-data (e / b dx dy m p1 p2)
  4.    (setq p1 (trans(vlax-curve-getstartpoint e)0 1)
  5.          p2 (trans(vlax-curve-getendpoint e)0 1)
  6.          dx (- (car p2) (car p1))
  7.          dy (- (cadr p2) (cadr p1))   
  8.    )
  9.   (if (and (>(abs dy)1e-5)
  10.            (<(abs(/ dx dy))0.002)    ;;差不多0.1度
  11.       )
  12.        (setq m 1e33                         ;竖线.
  13.              b (car p1)
  14.        )
  15.        (setq m (/ dy dx)
  16.              b (- (cadr p1)(* m (car p1)))) ; -> b=y-m*x
  17.    )
  18.    (list m b)
  19. )
直线用方程表示 y = mx+b ,精度自己调

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

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

 楼主| 发表于 2013-10-13 18:18:48 | 显示全部楼层
  1. ;;;==========================================
  2. ;;;矢量叉乘
  3. ;;;------------------------------------------
  4. (defun vector-cross (v1 v2 / )
  5. (setq v1(3d v1)v2(3d v2))
  6.     (list (- (* (cadr v1) (caddr v2)) (* (caddr v1) (cadr v2)))
  7.           (- (* (caddr v1) (car v2)) (* (car v1) (caddr v2)))
  8.           (- (* (car v1) (cadr v2)) (* (cadr v1) (car v2)))
  9.     )
  10.   )
  11. ;;;二矢量点积
  12. (defun vector-scalar (v1 v2)
  13.    (apply '+ (mapcar '* v1 v2))
  14. )

  15. ;;;矢量的长度:
  16.   (defun vector-length (v)
  17.     (sqrt (apply '+ (mapcar '(lambda (x) (* x x)) v)))
  18.   )
  19. ;;;矢量的单位化
  20.   (defun vector-unit (v)
  21.     (mapcar '(lambda (x) (/ x (vector-length v))) v)
  22.   )

矢量:


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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

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

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

 楼主| 发表于 2013-10-13 18:24:44 | 显示全部楼层
  1. ;;;==============================================================
  2. ;;;t:p1点在线p2 p3的上下方,或线上. 如果垂足在p2或p3上,返回p2 p3
  3. (defun pt-on-line(p1 p2 p3 / k len v1 v2 v3)
  4. (if(not(equal p2 p3 1e-4))
  5.   (setq v1(mapcar '- p1 p2)
  6.         v2(mapcar '- p3 p2)
  7.         ;v3(vector-cross v1 v2)
  8.         len(vector-length v2)
  9.         k (/(vector-scalar v1 v2)len len)
  10.   )
  11. )
  12.   (cond((equal k 0. 1e-3)p2)
  13.        ((equal k 1. 1e-3)p3)
  14.        ((< 0. k 1.) t)
  15.        (t nil)
  16.   )
  17. )

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

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

 楼主| 发表于 2013-10-13 18:54:42 | 显示全部楼层
  1. ;;;==============================================================
  2. ;;;p1 和p2 p3关系.1:逆时 0:上 -1:顺时
  3. (defun pt-line-rl(p1 p2 p3 /  len v1 v2 v3)
  4.   (setq v1(mapcar '- p1 p2)
  5.         v2(mapcar '- p3 p2)
  6.         v3(vector-cross v1 v2)
  7.         len(apply '+ v3)
  8.   )
  9.   (cond
  10.    ((equal len 0.0 1e-4) 0)     ;;上
  11.     ((> len 0) -1)              ;;顺时
  12.     (t 1)                       ;;逆时
  13.   )
  14. )

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

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

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

 楼主| 发表于 2013-10-13 19:51:40 | 显示全部楼层
  1. ;;p1到p2 p3垂足
  2. (defun pt-line-per(p1 p2 p3 / k len per v1 v2 x)
  3. (if(not(equal p2 p3 1e-4))
  4.    (setq v1(mapcar '- p1 p2)
  5.          v2(mapcar '- p3 p2)
  6.          len(vector-length v2)
  7.          k (/(vector-scalar v1 v2)len len)
  8.          per (mapcar '+ p2 (mapcar '(lambda(x)(* k x)) v2))
  9.    )
  10.   nil)
  11. )
返回 垂足

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-10-13 20:00:41 来自手机 | 显示全部楼层
AEO版主这些都是数学方法啊,学习了

点评

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

 楼主| 发表于 2013-10-13 23:34:31 | 显示全部楼层
三点一线

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-10-13 23:57:59 | 显示全部楼层
st788796 发表于 2013-10-13 20:00
AEO版主这些都是数学方法啊,学习了

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

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

 楼主| 发表于 2013-10-14 01:31:10 | 显示全部楼层
  1. ;;;转换点(矩阵作用于向量上)
  2. (defun MxV (mat v)
  3.   (setq v (4d v))
  4.   (mapcar '(lambda (row) (vector-scalar  row v)) mat)
  5. )



  6. ;;;----------------------------
  7. ;;;运用一下,其实还没有几何方法方便

  8. ;;;3点的内接圆--》 '(圆心 半径)
  9. ;;;(ax1+bx2+cx3)/(a+b+c),(ay1...)/(a+b+c)
  10. (defun 3p->circle-in (p1 p2 p3 / lst x y pcen r)
  11.   (if (/= 0(pt-line-rl p1 p2 p3))
  12.      (setq lst(mapcar '(lambda(x y )(distance x y)) (list p2 p3 p1)(list p3 p1 p2))
  13.            lst(mapcar '(lambda(x)(/ x (apply '+ lst))) lst )
  14.            pcen  (MxV (apply 'mapcar (cons 'list (list p1 p2 p3))) lst)
  15.            r  (list pcen (distance pcen(pt-line-per pcen p2 p3)))
  16.      )
  17.    nil)
  18. )
内接圆

评分

参与人数 1D豆 +5 收起 理由
xshrimp + 5 技术引导讨论和指点奖!

查看全部评分

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

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

 楼主| 发表于 2013-10-15 21:04:17 | 显示全部楼层
两 pl线连起来 首尾相连成一根
http://bbs.xdcad.net/thread-671093-1-1.html

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 11:22 , Processed in 0.212224 second(s), 62 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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