找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4808|回复: 12

[LISP函数-点]:两点的中点

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-9-1 06:18:21 | 显示全部楼层 |阅读模式

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

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

×

  1. (defun xd-mid_point (p1 p2)
  2.   (mapcar '(lambda (x) (/ x 2)) (mapcar '+ p1 p2))
  3. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-9-3 21:08:07 | 显示全部楼层
如果想用取两点间的中点的程序作为一种捕捉方式,得用反应器,程序如下: (引自帖子“如何让程序计算出的点优先于捕捉点?”)

  1. (defun recover_snap ( reactor_object lisp_list / )
  2.         (setvar "osmode" $$mpt_osmode)
  3.         (vlr-remove $$mptReactor)
  4. )

  5. (defun mpt ( / a b mx my mz )
  6.         (while (not (setq a (getpoint "\nFirst Point : "))))
  7.         (while (not (setq b (getpoint a "\nSecond Point: "))))
  8.         (setq mx (/ (+ (car b) (car a)) 2.0))
  9.         (setq my (/ (+ (cadr b) (cadr a)) 2.0))
  10.         (setq mz (/ (+ (caddr b) (caddr a)) 2.0))
  11.         (setq $$mpt_osmode (getvar "osmode"))
  12.         (setvar "osmode" 0)
  13.         (setq $$mptReactor (vlr-lisp-reactor data '((:vlr-lispEnded . recover_snap))))
  14.         (setq pt (list mx my mz))
  15. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

已领礼包: 111个

财富等级: 日进斗金

发表于 2006-1-4 12:41:47 | 显示全部楼层
  1. ;也可以这样:
  2. (defun zhd(pt1 pt2)
  3.    (mapcar '* '(0.5 0.5 0.5) (mapcar '+ pt1 pt2))
  4. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-1-5 08:36:24 | 显示全部楼层
都可以
  1. (defun getmidpoint(pt1 pt2)
  2.    (mapcar  '(lambda (x y)(/(+ x y) 2))pt1  pt2)   
  3. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 111个

财富等级: 日进斗金

发表于 2006-1-5 13:07:05 | 显示全部楼层
点(1 1)和点(2 2)的中点为(1.5 1.5), eachy和firstintimate的函数皆得不到正确的结果,
Command: (setq pt (xd-mid_point '(1 1) '(2 2)))
(1 1)
Command: (rtos (car pt) 2 10)
"1"
Command: (setq pt (getmidpoint '(1 1) '(2 2)))
(1 1)
Command: (rtos (car pt) 2 10)
"1"

应分别修改为如下:
  1. (defun xd-mid_point (p1 p2)
  2.   (mapcar '(lambda (x) (/ x 2.0)) (mapcar '+ p1 p2))
  3. )
  1. (defun getmidpoint(pt1 pt2)
  2.    (mapcar  '(lambda (x y)(/(+ x y) 2.0)) pt1  pt2)   
  3. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2006-1-6 09:08:30 | 显示全部楼层
这是 Autolisp 运算规则,两数运算均为整数时结果为整数,有一个实数时结果为实数
_$ (/ 3 2)
1
_$ (/ 3 2.)
1.5
_$ (/ 3. 2)
1.5
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2006-5-27 09:33:25 | 显示全部楼层
如果是串列表座标该怎样用这函数处理呢?
如表为 ((718.412 755.629) (1520.57 863.88) (906.125 266.541))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-7-23 09:15:56 | 显示全部楼层
我一般这样求中点:

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 05:49 , Processed in 0.190654 second(s), 56 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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