乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 66|回复: 11

[编程交流] VBA-从2点获取角度

[复制链接]

7

主题

22

帖子

15

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 14:52:39 | 显示全部楼层 |阅读模式
大家好。(aCad2007)
 
我用这段代码在VBA中获得了2个点。
 
如何获得它们之间的角度?如90度或45度
 
谢谢
回复

使用道具 举报

7

主题

22

帖子

15

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 14:58:44 | 显示全部楼层
也尝试过。。。
 
  1. Dim d As Double
  2. d = ThisDrawing.Utility.AngleFromXAxis(vPoint1,vPoint2)
  3. Debug.Print ThisDrawing.Utility.AngleToString(d, acDegrees, 2)
,但无论vPoint1和2是什么,它都只返回0.00。
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 15:08:36 | 显示全部楼层
当你说得到两点之间的角度时,你是在暗示有一个共同的顶点吗?也许是世界起源?
 
AngleFromXAxis的工作方式是使用提供的两个点创建一条线,并返回它与世界X轴的角度。
 
如果确实存在公共顶点,则应将其与其他两个点配对,使用AngleFromXAxis两次,然后从另一个中减去一个。
回复

使用道具 举报

7

主题

22

帖子

15

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 15:14:23 | 显示全部楼层
 
令我沮丧的是,我一年大约有3周的时间来扮演Autocad大师,正如你所想象的那样,我做得很差劲。(现在,如果你有一些SQL或.NET,那么我可以)所以当你说“公共顶点”或“世界起源”时,我不知道那是什么。(我继承了这个项目,你的程序员是什么?在这里修复这个)
 
但基本上,我用GetPoint得到2个点,然后插入一个现有的图形,均匀分布在这条线上。他们要求的是旋转刚插入的图形,使其与点成什么角度。因此,如果两个点是180度(上下),则将图形旋转180度。如果这两个点从左到右,则为0度。所以我只有GetPoint函数中的两个数组。
 
再次感谢
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 15:19:36 | 显示全部楼层
简单的老式罪恶
 
当你得到一个点时,它由3部分x,y,z组成,你只需要应用一个简单的正弦规则sin(ang)=o/h cos=a/h tan=o/a(其他人有回答ohahoa的习惯)
 
ie pt1(0)=x1 pt1(1)=y1 pt1(2)=z
pt2(0)=x2 pt2(1)=y2 pt1(2)=z
 
a=pt2(0)-pt1(0)
o=pt2(1)-pt1(1)
h=sqrt(a^2+o^2)
 
尝试记住pt1和pt2的正确dim
将dblPOINT(0到2)设置为双精度
 
我会写两个函数,距离和角度,这样你们可以在其他程序中随时使用它们。它可能是lisp中的标准vba函数(距离pt1 pt2)(角度pt1 pt2)?
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 15:21:38 | 显示全部楼层
BIGAL提到的标准VBA函数实际上就是这个图。公用事业角度x轴(和ThisDrawing.Utility.GetDistance表示距离)。毫无疑问,AngleFromXAxis使用了相同的数学公式。
 
然而,需要注意的是,在UCS中使用这两个函数而不是世界坐标系时。如果可能存在替代UCS,则需要坐标转换。参见示例:
 
 
  1. Sub AngleSample()
  2. Dim vPoint1 As Variant
  3. Dim vPoint2 As Variant
  4. Dim vTrans1 As Variant
  5. Dim vTrans2 As Variant
  6. Dim d As Double
  7. Dim strMsg As String
  8.   With ThisDrawing.Utility
  9.      On Error Resume Next
  10.      vPoint1 = .GetPoint(, "Select Point 1: " & vbCr)
  11.      If Err <> 0 Then Exit Sub
  12.      vTrans1 = .TranslateCoordinates(vPoint1, acWorld, acUCS, 0)
  13.      vPoint2 = .GetPoint(vTrans1, "Select Point 2: ")
  14.      If Err <> 0 Then Exit Sub
  15.      On Error GoTo 0
  16.      vTrans2 = .TranslateCoordinates(vPoint2, acWorld, acUCS, 0)
  17.      d = .AngleFromXAxis(vTrans1, vTrans2)
  18.      strMsg = .AngleToString(d, acDegrees, 2)
  19.      .Prompt "Angle in Degrees is " & strMsg & vbLf
  20.   End With
  21. End Sub
回复

使用道具 举报

7

主题

22

帖子

15

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 15:26:24 | 显示全部楼层
肖特,比格尔,谢谢
 
也许我看错了。。。如果你看我上传的图片。您可以看到,我插入的图形(称为椅子)跨使用GetPoint选择的线插入。因此,如果这条线是从12点到6点,那么椅子被均匀地间隔90度插入。如果线是从左向右的,则椅子将插入0度。
 
至少直到本周我都是这样理解的。现在他们希望它遵循最右边的数字。这就是为什么我要计算学位。
 
我想我看错了。任何评论都会很有帮助。
 
谢谢
155245vvw2t2uogtl3yr22.jpg
回复

使用道具 举报

8

主题

50

帖子

42

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 15:31:22 | 显示全部楼层
 
可以使用旋转。。键入Ro,然后选择对象。。。进来选择参考,该参考是来自对象的新角度。。然后输入要旋转的指定角度。。
 
对不起,我英语不好。。
 
奥利弗
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 15:39:44 | 显示全部楼层
我认为你做错的是计算角度排序,Autocad以弧度逆时针测量角度,在编写代码时不注意单位设置,因此有时你甚至需要知道要在哪个象限中加90度或减90度,这样块就不会出现倒置。还要确保你的世界UCS。
 
对于你的方块,你将线的角度加1.5714,然后倒置调整。
回复

使用道具 举报

8

主题

50

帖子

42

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 15:45:05 | 显示全部楼层
这是一部电影。。。
 
  1. 3

 
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 21:56 , Processed in 0.871013 second(s), 74 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表