Bryco 发表于 2006-7-31 10:17:33

可能会以这种方式结束,米克。
Blockref有这些特性,但我没有Blockref。(点和块项)
我可以使用selectatpoint seltionset获取block ref,但我想先学习如何使用我拥有的东西。
这是为2个块提供的矩阵的debug.print
TransMatrix用于插入4,4 0旋转
1 0 0 0
0 1 0
0 0 1 0
4 4 0 1
TransposedMatrix
1 0 0 4
0 1 0 4
0 0 1 0
0 0 0 1
TransMatrix插入4,4 0旋转
0.707106781186547 0.707106781186548 0 0
-0.707106781186548 0 0
0 0 1 0
4 2 0 1
>TransposedMatrix
0.707106781186547-0.707106781186548 0 4
0.707106781186548 0.707106781186547 0 2
0 0 1 0
0 0 0 1
转置的外观符合犹太教规,并且完美地将从块记录复制的ent带到块参考。
我刚开始做逆运算。
我可能在整数和双打之间混淆了

MickD 发表于 2006-7-31 21:38:16

有些东西看起来不对劲,向量下面的底行应该是0,这些只是为了“平方”矩阵,或者也许对于投影计算,你的平移向量应该在右边。我从帮助文档中附加了一张可能有帮助的图片。无论如何,他们绝对不应该从底部到右侧交换,我不会想到。

MickD 发表于 2006-7-31 21:45:45

我认为你所需要的只是“反转”它而不是转置,尝试否定值而不是交换它们。
也就是说,你可以用一个向量(3,2,1)移动它,另一个方向移动它就是向量否定(-3,-2,-1),它应该指向另一个方向。轮换也应如此。
嗯,
米克.

Bryco 发表于 2006-7-31 22:25:07

好吧,米克,你为了胜利而破解了它。
反转然后转置似乎有效。
感谢您的提示。
现在,我必须解决乘法公式。

Bryco 发表于 2006-8-3 23:44:38

到目前为止,这些似乎都有效,它们有待讨论,我相信它们会更好
这就是我想使用矩阵的原因
Sub TestMultiplyMatrix()
    Dim P, Ent As AcadEntity
    Dim i As Integer
    Dim M, ContextData, TransMatrix
   
    ThisDrawing.Utility.GetSubEntity Ent, P, TransMatrix, ContextData
    ThisDrawing.ModelSpace.AddPoint P
    If VarType(ContextData) = vbEmpty Then
      MsgBox "This is not a block"
      Exit Sub
    End If
    M = InverseMatrix(TransMatrix)
   
    P = TransformPt(M, P)
    P = NearestPtOnObject(Ent, P)
    P = TransformPt(TransMatrix, P)
    ThisDrawing.ModelSpace.AddPoint P
   
End Sub
NearestPtOnObject(Ent, P)函数不包括在内,因为我仍在研究它。
我以为走到这一步会让我从数学中休息一下,但相反,我似乎打开了潘多拉的盒子。
离椭圆最近的点是疯狂的。我甚至不知道这篇文章是提供了证明还是问题。我倾向于使用提到“最佳猜测”的那个,
页: 1 [2]
查看完整版本: getsubentity中的TransMatrix是什么?