ntyks 发表于 2009-9-29 14:32:00

cjb2187 发表于 2009-9-30 09:43:00

<p>不知道你想说什么,是不是说点两个点,这两个点是矩形的长和宽的中心点,而且长和宽的尺寸均可以输入?</p><p>如果是这样你永远也写不出来,因为数学模型就不成立,如下图所示</p><p></p><p>图中pt1和pt2是所点的两点,S是两点间的长度,所输入的长和宽的尺寸分别为2A和2B,即半个长度A和半个宽度B和S构成一个三角形,一个三角形的三条边长均已知怎么能保证夹角P是个直角呢,用你的平面几何知识算一下这个角度的公式吧,这明显是一个无法完成的任务,而P只要不是直角你得出来的肯定是一个平行四边形,哈哈</p>

ntyks 发表于 2009-10-10 11:59:00

wylong 发表于 2009-10-10 17:24:00

Public Function DrawRectang(RecHalfWidth As Double) As Object
    Dim Pt1 As Variant
    Dim Pt2 As Variant
    Dim RectRotation As Double
    Dim objPolyline As Object
    Dim RectangPoint(0 To 11) As Double
   
    ' 获得第一点Pt1
    Pt1 = ThisDrawing.Utility.GetPoint(, "指定起始点")
    ' 获得第二点Pt2
    Pt2 = ThisDrawing.Utility.GetPoint(Pt1, "指定结束点")
    ' 得到两点构成直线的的角度值
    RectRotation = Atn((Pt2(1) - Pt1(1)) / (Pt2(0) - Pt1(0)))
   
    ' 根据Pt1、Pt2两点计算矩形各顶点坐标
    RectangPoint(0) = Pt1(0) - RecHalfWidth * Sin(RectRotation)
    RectangPoint(1) = Pt1(1) + RecHalfWidth * Cos(RectRotation)
   
    RectangPoint(3) = Pt1(0) + RecHalfWidth * Sin(RectRotation)
    RectangPoint(4) = Pt1(1) - RecHalfWidth * Cos(RectRotation)
   
    RectangPoint(6) = Pt2(0) + RecHalfWidth * Sin(RectRotation)
    RectangPoint(7) = Pt2(1) - RecHalfWidth * Cos(RectRotation)
   
    RectangPoint(9) = Pt2(0) - RecHalfWidth * Sin(RectRotation)
    RectangPoint(10) = Pt2(1) + RecHalfWidth * Cos(RectRotation)
   
    Set objPolyline = ThisDrawing.ModelSpace.AddPolyline(RectangPoint)
    objPolyline.Closed = True
   
    Set DrawRectang = objPolyline
End Function

ntyks 发表于 2009-10-10 19:33:00

crazylsp 发表于 2013-4-11 17:14:03

本帖最后由 crazylsp 于 2013-4-11 17:26 编辑

谢谢wlong的程序,不过画出是个旋转角度的不过这样也好,随机的美感,半宽其实不用设,可由pt1,pt2两个点计算出

894560869 发表于 2019-1-25 19:41:54

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=91464&highlight=%BB%AD%BE%D8%D0%CE
页: [1]
查看完整版本: 如何画矩形?