明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1481|回复: 0

求所选直线的方程及其它三个有用的函数

[复制链接]
发表于 2005-2-28 15:15:00 | 显示全部楼层 |阅读模式
因工作需要编制了三个小函数。希望能对大家有用。 1.求所选直线的方程; 2过一点与之垂直的直线的方程; 3该点到该直线上最近一点的距离。以上三个函数可独立使用。 ;;;******************************************************************
;;;得到所给直线的公式(含竖直线x=c) y=kx+c,k=tanθ(斜率)或x=c
(defun lineformula (LineE / LineStPt LineEdPt k c)
(setq LineStPt (assoc 10 (entget LineE)))
(setq LineEdPt (assoc 11 (entget LineE)))
(if (/=(cadr LineStPt)(cadr LineEdPt))
(progn
(setq k (/ (- (caddr LineStPt) (caddr LineEdPt))
(- (cadr LineStPt) (cadr LineEdPt))
)
)
(setq c (- (caddr LineEdPt) (* k (cadr LineEdPt))))
(strcat "y=" (rtos k) "x+" (rtos c))
)
(strcat "x=" (rtos (cadr LineStPt)))
)
)
;;;*****************************************************************
;;;由所给直线的方程得到过一点与之相垂直的直线的方程
(defun perlineformula (LineStr pt / k)
;;pt是点对,如(1.0 2.1 0)
(if (= (substr LineStr 1 1) "x") ;表明是垂直线
(strcat "y=0x+" (rtos (cadr pt)))
(if (= (substr LineStr 3 2) "0x") ;表明是水平线
(strcat "x=" (rtos (car pt)))
(strcat
"y="
(rtos
(setq k (- 0
(/ 1
(distof
(substr LineStr
3
(- (vl-string-search "x" LineStr) 2)
)
)
)
)
)
)
"x+" ;例如:y=-1x+-6
(rtos (- (cadr pt) (* k (car pt))))
)
)
)
)
;;调用方式:(perlineformula (lineformula (car (entsel))) (getpoint"\nselect a
;;point.\n"))
;;检验方法:(lineformula (car (entsel))) ;;;给定一直线和一点,得到由该点到直线上的一点的最近距离
(defun pt2linedist (LineE Pt)
(vl-load-com)
(distance Pt
(vlax-curve-getClosestPointTo
(vlax-ename->vla-object LineE)
Pt
)
) ;得到两点之间的距离
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-9-29 18:26 , Processed in 0.142484 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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