找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 530|回复: 5

[求助]:过一点做直线的垂线?

[复制链接]
发表于 2005-5-12 14:52:02 | 显示全部楼层 |阅读模式

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

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

×
已知一直线和直线上的一点,有什么简单的方法能过该点作出已知直线的垂线?望高手能予指教
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-5-14 19:58:49 | 显示全部楼层
先计算点到直线的距离,然后以该点为圆心以刚才的距离为半径绘一个圆,求该圆与直线的交点,即为所求!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-14 23:02:31 | 显示全部楼层
谢谢指教,我已经会了,但2楼的方法不对,可能是叙述时说得词不达意,以致错了。利用求垂直平分线的方法,分别以垂足两边等距离的两点为圆心,以大于圆心到垂足距离的数值为半径做两个圆,交点即为两个要求点之一,再稍做一下判断,留下一个符合的点与垂足相连做直线即可。
我想找的是有没有更简单的方法可以达到同样目的,如果没有的话也就算了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-5-14 23:03:41 | 显示全部楼层
试试这个:

  1. Sub test()
  2. Dim lineobj1 As AcadLine
  3. Dim lineobj2 As AcadLine
  4. Dim pnt1 As Variant
  5. Dim ang As Double
  6. Dim pi As Double
  7. pi = 4 * Atn(1)
  8. ThisDrawing.Utility.GetEntity lineobj1, pnt, "select a line:"
  9. ang = pi * 0.5
  10. pnt1 = ThisDrawing.Utility.GetPoint(, "select a point:")
  11. Set lineobj2 = lineobj1.Copy()
  12. lineobj2.Rotate pnt1, ang
  13. End Sub
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2005-5-22 15:01:46 | 显示全部楼层
题目的意思没有说清楚,分两种情况:
设直线两端点为AB,点为C
1、点在直线上,即已知垂足,很简单,求出AB与X轴的夹角(用AngleFromXAxis(Point1, Point2))即可得到,此角加 PI/2 即为垂线与X轴夹角,用PolarPoint(Point, Angle, Distance)或极坐标,可得到垂线上任意一点坐标,垂线就可以画出来。
2、点在直线外,即垂足未知(这需要先判断点确实不在直线或其延长线上,可以分别求AC、BC与X轴夹角,非常接近0或PI 即为在直线上)。可以以AC或BC为直径,画圆,用IntersectWith(IntersectObject, ExtendOption)方法可以求出圆与AB的两个交点,其中一个为A(以AC为直径)或B点(以BC为直径),另一个为垂足D点。
AngleFromXAxis(Point1, Point2)比较好用,但在CAD中有时不太方便,比如在比较大的循环中使用时很耗时间,Undo时也比较麻烦。我一般习惯自己编写函数。以下是求直线AB与X轴夹角的函数,使用时要注意起点坐标在前,终点坐标在后,返回值为弧度。MConstdblPI为常量PI值,建议作为全局常量赋值,大小为3.14159265358979 。
  1. Function GetAngle(mydblPntAX As Double, mydblPntAY As Double, mydblPntBX As Double, mydblPntBY As Double) As Double
  2.     Dim dblDeltaX As Double
  3.     Dim dblDeltaY As Double
  4.     Dim dblTmpAngle As Double
  5.     Dim dbltmpTGAngle As Double
  6.     dblDeltaX = mydblPntBX - mydblPntAX
  7.     dblDeltaY = mydblPntBY - mydblPntAY
  8.         
  9.     If dblDeltaX = 0 Then
  10.         dblTmpAngle = IIf(dblDeltaY >= 0, MConstdblPI / 2, 3 * MConstdblPI / 2)
  11.     Else
  12.         If dblDeltaY = 0 Then
  13.             dblTmpAngle = IIf(dblDeltaX >= 0, 0#, MConstdblPI)
  14.         Else
  15.             dbltmpTGAngle = dblDeltaY / dblDeltaX
  16.             If dblDeltaX > 0 Then
  17.                 dblTmpAngle = Atn(dbltmpTGAngle)
  18.             Else
  19.                 dblTmpAngle = Atn(dbltmpTGAngle) + MConstdblPI
  20.             End If
  21.         End If
  22.     End If
  23.     GetAngle = dblTmpAngle
  24. End Function
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-29 01:23 , Processed in 0.564458 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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