明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2403|回复: 4

已知一条直线和直线外一点求垂足??

[复制链接]
发表于 2007-2-9 15:41:00 | 显示全部楼层 |阅读模式

求助:已知一条线两端点坐标(x1,y1);(x2,y2)和直线外一点(x3,y3),用VBA怎样求出垂足????请那位老兄给个代码!!!

发表于 2007-2-9 17:14:00 | 显示全部楼层
发表于 2007-2-9 19:17:00 | 显示全部楼层
本帖最后由 作者 于 2007-2-9 19:19:43 编辑

Option Explicit
Public Sub Sample()
  Dim objline As AcadLine
  Dim lineObj As AcadLine
  Dim returnPnt As Variant
  Dim sp(0 To 2) As Double
  Dim ep(0 To 2) As Double
  Dim ang As Double
  Dim pt(0 To 2) As Double
  Const pi = 3.14159

  '1. 一条线两端点坐标(x1,y1);(x2,y2) :设该直线为objline
  '   如果只有两端点坐标(x1,y1);(x2,y2), 可用 addline 方法画出该直线
  ThisDrawing.Utility.GetEntity objline, pt, "Select a line"
  ang = objline.Angle
  returnPnt = ThisDrawing.Utility.GetPoint(, "Enter a point: ")
  sp(0) = returnPnt(0)
  sp(1) = returnPnt(1)
  sp(2) = returnPnt(2)

  '2.做直线objline的垂线lineObj
  ep(0) = sp(0) + Cos(ang + pi / 2)
  ep(1) = sp(1) + Sin(ang + pi / 2)
  ep(2) = sp(2)
  Set lineObj = ThisDrawing.ModelSpace.AddLine(sp, ep)
 
  '3.找出直线objline和它的垂线lineObj的交点pt
  returnPnt = lineObj.IntersectWith(objline, acExtendNone)
  If VarType(returnPnt) <> vbEmpty Then
     If LBound(returnPnt) <= UBound(returnPnt) Then
        pt(0) = returnPnt(0)
        pt(1) = returnPnt(1)
        pt(2) = returnPnt(2)
     End If
  End If
  returnPnt = lineObj.IntersectWith(objline, acExtendBoth)
  If VarType(returnPnt) <> vbEmpty Then
     If LBound(returnPnt) <= UBound(returnPnt) Then
        pt(0) = returnPnt(0)
        pt(1) = returnPnt(1)
        pt(2) = returnPnt(2)
     End If
  End If
  lineObj.Delete
 
  '4.画垂线
  Dim obj1 As AcadLine
  Set obj1 = ThisDrawing.ModelSpace.AddLine(sp, pt)
End Sub

发表于 2007-2-18 10:18:00 | 显示全部楼层

如何是空间任意直线,你这种就有局限了.你这个公式是解决X-Y平面的.

我不会3X3矩阵的展开式.你能将下列成

X=??

Y= ??

Z = ??

形体的旋转变换有绕主轴旋转,或绕空间任一直线旋转等多种形式。若令Rθ表示绕z轴转θ角,Rβ表示绕y轴转β角,Rγ表示绕x轴转γ角,则点P绕x、y、z轴转γ、β、θ角的变换公式是
R=RθRβRγ
     |  cosθ   sinθ   0 |
Rθ= | -sinθ   cosθ    0  |
      |  0       0     1  |


     |  cosβ  -sinβ   0  |
Rβ= |   0     1     0   |
     |  sinβ  cosβ    1   |

     |  1     0       0   |
Rγ= |  0    cosγ   sinγ  |
     |  0     -sinγ  cosγ |

本帖子中包含更多资源

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

x
发表于 2007-2-26 14:52:00 | 显示全部楼层

三楼的函数有问题吧,

ep(0) = sp(0) + Cos(ang + pi / 2)
ep(1) = sp(1) + Sin(ang + pi / 2)

这部分没有乘上垂线长度.

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

本版积分规则

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

GMT+8, 2024-11-26 18:44 , Processed in 0.166623 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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