找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 888|回复: 9

[请指教]我前段时间编写其它程序时建立的自用函数!

[复制链接]
发表于 2005-11-10 13:04:42 | 显示全部楼层 |阅读模式

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

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

×

  1.   [FONT=courier new]
  2. ;;;********************************;;;
  3. ;;;---------三维点相加程序---------;;;
  4. ;;;********************************;;;

  5. (defun 3dpoint_add (point1 point2 / x1 y1 z1 x2 y2 z2 finalpoint)
  6.   (if (= (length point1) 3)
  7.     (if        (= (length point2) 3)
  8.       (progn
  9.         (setq x1 (car point1)
  10.               y1 (cadr point1)
  11.               z1 (caddr point1)
  12.               x2 (car point2)
  13.               y2 (cadr point2)
  14.               z2 (caddr point2)
  15.         )
  16.         (setq finalpoint (list (+ x1 x2) (+ y1 y2) (+ z1 z2)))
  17.       )
  18.       (princ "\n第二点不是三维点")
  19.     )
  20.     (princ "\n第一点不是三维点")
  21.   )
  22.   finalpoint
  23. )


  24. ;;;********************************;;;
  25. ;;;-----三维点相减程序(p1-p2)------;;;
  26. ;;;********************************;;;

  27. (defun 3dpoint_subtract        (point1 point2 / x1 y1 z1 x2 y2 z2 finalpoint)
  28.   (if (= (length point1) 3)
  29.     (if        (= (length point2) 3)
  30.       (progn
  31.         (setq x1 (car point1)
  32.               y1 (cadr point1)
  33.               z1 (caddr point1)
  34.               x2 (- 0.0 (car point2))
  35.               y2 (- 0.0 (cadr point2))
  36.               z2 (- 0.0 (caddr point2))
  37.         )
  38.         (setq finalpoint (list (+ x1 x2) (+ y1 y2) (+ z1 z2)))
  39.       )
  40.       (princ "\n第二点不是三维点")
  41.     )
  42.     (princ "\n第一点不是三维点")
  43.   )
  44.   finalpoint
  45. )

  46. ;;;********************************;;;
  47. ;;;-三维点乘以常量3dpoint_multiply-;;;
  48. ;;;********************************;;;

  49. (defun 3dpoint_multiply        (point1 multiple / x1 y1 z1 finalpoint)
  50.   (if (= (length point1) 3)
  51.     (progn
  52.       (setq x1 (car point1)
  53.             y1 (cadr point1)
  54.             z1 (caddr point1)
  55.       )
  56.       (setq finalpoint
  57.              (list (* x1 multiple)
  58.                    (* y1 multiple)
  59.                    (* z1 multiple)
  60.              )
  61.       )
  62.     )
  63.     (princ "\n第一点不是三维点")
  64.   )
  65.   finalpoint
  66. )
  67. ;;;**********************************;;;
  68. ;;;提取三维点的x、y坐标并置换为二维点;;;
  69. ;;;**********************************;;;

  70. (defun 3d->2d_xy (point1 / x1 y1 finalpoint)
  71.   (if (= (length point1) 3)
  72.     (progn
  73.       (setq x1 (car point1)
  74.             y1 (cadr point1)
  75.       )
  76.       (setq finalpoint (list x1 y1 0.0))
  77.     )
  78.     (princ "\n该点不是三维点")
  79.   )
  80.   finalpoint
  81. )
  82. ;;;**********************************;;;
  83. ;;;-该函数将获得两条线段的交点并输出-;;;
  84. ;;;**********************************;;;

  85. (defun 2line_crossing (p1 p2 p3        p4 / x y x1 y1 x2 y2 x3        y3 x4 y4 k1 k2
  86.                        b1 b2)
  87.   (setq        x1 (car p1)
  88.         y1 (cadr p1)
  89.         x2 (car p2)
  90.         y2 (cadr p2)
  91.         x3 (car p3)
  92.         y3 (cadr p3)
  93.         x4 (car p4)
  94.         y4 (cadr p4)
  95.   )
  96.   (if (and (= x2 x1) (= x3 x4))
  97.     (alert "两条平行线--不相交")
  98.   )
  99.   (if (and (= x2 x1) (/= x4 x3))
  100.     (setq x x1
  101.           y (- y3 (/ (* (- x1 x3) (- y3 y4)) (- x4 x3)))
  102.     )
  103.   )
  104.   (if (and (/= x2 x1) (= x4 x3))
  105.     (setq x x3
  106.           y (- y1 (/ (* (- x3 x1) (- y1 y2)) (- x2 x1)))
  107.     )
  108.   )
  109.   (if (and (/= x2 x1) (/= x3 x4))
  110.     (setq k1 (/ (- y2 y1) (- x2 x1))
  111.           b1 (- y1 (* k1 x1))
  112.           k2 (/ (- y4 y3) (- x4 x3))
  113.           b2 (- y3 (* k2 x3))
  114.     )
  115.   )
  116.   (if (/= k1 nil)
  117.     (if        (> (- k1 k2) 0.000001)
  118.       (setq x (/ (- b2 b1) (- k1 k2))
  119.             y (+ b1 (* k1 x))
  120.       )
  121.       (alert "两条平行线--不相交")
  122.     )
  123.   )
  124.   (list x y 0.0)
  125. )
  126. ;;;**********************************;;;
  127. ;;;-角度值转换为弧度函数jiaodu->hudu-;;;
  128. ;;;**********************************;;;

  129. (defun jiaodu->hudu (jiaodu / hudu)
  130.   (setq hudu (* pi (/ jiaodu 180.0)))
  131.   hudu
  132. )


  133. ;;;**********************************;;;
  134. ;;;-弧度值转换为角度函数hudu->jiaodu-;;;
  135. ;;;**********************************;;;

  136. (defun hudu->jiaodu (hudu / jiaodu)
  137.   (setq jiaodu (* 180.0 (/ hudu pi)))
  138.   jiaodu
  139. )


  140. ;;;**********************************;;;
  141. ;;;-----------正切值函数tan----------;;;
  142. ;;;**********************************;;;

  143. (defun tan (jiaodu)
  144.   (/ (sin jiaodu) (cos jiaodu))
  145. )

  146. ;;;**********************************;;;
  147. ;;;-----------余切值函数ctan----------;;;
  148. ;;;**********************************;;;

  149. (defun ctan (hudu)
  150.   (/ (cos hudu) (sin hudu))
  151. )
  152. ;;;********************;;;
  153. ;;;--创建“主体”图层--;;;
  154. ;;;********************;;;

  155. (defun layer_zhuti ()
  156.   (if (= (tblobjname "LAYER" "主体") nil)
  157.     (progn
  158.       (setq x (entmake (list
  159.                          '(0 . "LAYER")
  160.                          '(100 . "AcDbSymbolTableRecord")
  161.                          '(100 . "AcDbLayerTableRecord")
  162.                          '(6 . "CONTINUOUS") ;线型
  163.                          '(62 . 7)        ;颜色
  164.                          '(70 . 0)        ;图层状态
  165.                          (cons 2 "主体") ;图层名
  166.                        )
  167.               )
  168.       )
  169.     )
  170.   )
  171.   (setvar "clayer" "主体")
  172. )

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

已领礼包: 593个

财富等级: 财运亨通

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

使用道具 举报

 楼主| 发表于 2005-11-10 17:10:12 | 显示全部楼层
谢谢谢谢,我本来没有打算得到什么爱心币,更加不敢奢望积分,只是想拿过来分享一下,以便大家提出一点意见和建议而已!一不小心竟而得了一分,看来今天得喝酒庆祝一下了!
再次感谢eachy斑竹!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-10 17:38:22 | 显示全部楼层
恭喜了!eachy斑竹对你不错!
东西不错,继续努力。

疑问:
1、三维点的操作用于何处?
2、2line_crossing (两条线段的交点并输出)里并没有线段
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-10 18:46:36 | 显示全部楼层

  1. ;;op 运算符
  2. ;;p1 点表
  3. ;;p2 点表
  4. (defun 3dPointOperate(op p1 p2)
  5.   (mapcar op p1 p2)
  6.   )
  7. ;;示例
  8. (setq a '(12.0 12.0 12.0))(setq b '(15 12 6))
  9. (print(3dPointOperate '+ a b))
  10. (print(3dPointOperate '- a b))
  11. (print(3dPointOperate '* a b))
  12. (print(3dPointOperate '/ a b))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-10 19:24:33 | 显示全部楼层
最初由 xyp1964 发布
[B]恭喜了!eachy斑竹对你不错!
东西不错,继续努力。

疑问:
1、三维点的操作用于何处?
2、2line_crossing (两条线段的交点并输出)里并没有线段 [/B]

谢谢xyp1964 斑竹!
三维点操作是我在主程序里经常用到,因为在编程中经常要用到插入点,各特征点都随插入点变化,所以编写了一个函数!
三维点乘以常量是因为我在计算时以m为单位,有时要出以cm为单位的图比较不方便,所以该常量为出图比例因子(好像有点罗嗦吧,呵呵!)
2line_crossing是point1-point2,point3-point4分别表示两条直线,在主程序中因为都是用点组成的数据列表,所以求两条线段交点较为方便!
我的主程可能有点麻烦,都是自己瞎咂摸出来的一些,但是有些思路可以和大家互相交流一下!

也非常感谢wkai斑竹,你的程序确实简洁明了,比我的好用多了!
谢谢各位,向你们学习!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2005-11-10 20:53:19 | 显示全部楼层
最初由 狂刀 发布
[B]没细看,好像把简单问题复杂化了 [/B]

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-11-11 02:57:36 | 显示全部楼层
线交点 -〉(inters p1 p2 p3 p4) or (inters p1 p2 p3 p4 nil)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-11 08:16:31 | 显示全部楼层
三维点操作在GIS数据中还是有意义的,如三维数据的调平处理!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 11:13 , Processed in 0.440854 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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