找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 598|回复: 8

[VBA程序]:如何确定方向?

[复制链接]
发表于 2002-10-14 11:37:53 | 显示全部楼层 |阅读模式

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

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

×
请教:如何确定多义线的顶点是按顺时针方向还是按逆时针方向排列?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-14 11:43:46 | 显示全部楼层

Re: [VBA程序]:[VBA程序]:请教:如何确定方向?

最初由 luln 发布
[B]请教:如何确定多义线的顶点是按顺时针方向还是按逆时针方向排列? [/B]


只有封闭的多义线才有”时针“方向,不知道你要做什么具体应用?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-10-14 11:49:18 | 显示全部楼层
我就是想判断封闭多义线的方向
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-14 11:59:50 | 显示全部楼层
最初由 luln 发布
[B]我就是想判断封闭多义线的方向 [/B]


给你贴个LISP代码,你把他们变成VBA程序吧,算法是利用行列式求顶点表构成的多边形的面积,如果面积为正(逆时针),如果面积为负(顺时针)。

实际应用中,你可以简化成求三角形的面积(第一点,倒数第二点,最后点)。


  1. [FONT=courier new]
  2. ;返回由顶点表 L1 构成的多边形面积.
  3. ;Return area(x 2) of a polygon 'l1'.
  4. (defun parea (l1 / s x1 y1 x2 y2 p1)
  5.   (setq s 0. p1 (last l1) x1 (car p1) y1 (cadr p1))
  6.   (foreach p1 l1
  7.     (setq x2 (car p1) y2 (cadr p1) s (- (+ s (* x1 y2)) (* x2 y1)) x1 x2 y1 y2)
  8.   )
  9.   s
  10. )[/FONT]


下面是求三角形的面积


  1. [FONT=courier new]
  2. ;返回三角形 p1p2p3 的面积.
  3. ;Return area(x 2) of a triangle(p1 p2 p3).
  4. (defun tarea (p1 p2 p3)
  5.   (- (+ (* (car p1) (cadr p2)) (* (car p2) (cadr p3)) (* (car p3) (cadr p1)))
  6.    (* (car p1) (cadr p3)) (* (car p2) (cadr p1)) (* (car p3) (cadr p2)))
  7. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-10-14 15:28:42 | 显示全部楼层
多谢晓东,我的问题终于解决了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-14 16:58:11 | 显示全部楼层
最初由 luln 发布
[B]多谢晓东,我的问题终于解决了。 [/B]


把解决的代码贴到论坛来吧,谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-11-5 09:30:12 | 显示全部楼层
这样计算的面积好象不对
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-11-5 09:39:27 | 显示全部楼层
:)是我错了。计算出来的面积/2就是对的我没有看清:)
“判断封闭多义线的方向”这样判断对我也很有用非常谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-11-9 21:34:09 | 显示全部楼层
最初由 XDSoft 发布
[B]

给你贴个LISP代码,你把他们变成VBA程序吧,算法是利用行列式求顶点表构成的多边形的面积,如果面积为正(逆时针),如果面积为?.. [/B]


vb 代码
Private Sub Command1_Click()
Dim x(50) As Single
Dim Y(50) As Single
Dim NUmBER As Integer
Dim I As Integer
Dim X1 As Single
Dim Y1 As Single
Dim X2 As Single
Dim Y2 As Single
Dim S As Variant
Dim temp As Single
Dim fname As Variant
fname = fn.FileName
fn.ShowOpen
Open fn.FileName For Input As #1

Do While Not EOF(1)
Input #1, temp, temp
NUmBER = NUmBER + 1
Loop
Close #1
Open fn.FileName For Input As #1
For I = 1 To NUmBER
Input #1, x(I), Y(I)
Next I
Close #1

S = 0
X1 = x(NUmBER)
Y1 = Y(NUmBER)
For I = 1 To NUmBER

X2 = x(I)
Y2 = Y(I)
S = (S + X1 * Y2) - (X2 * Y1)
X1 = X2
Y1 = Y2
Next I
S = S / 2
MsgBox "AREA IS " & S

End Sub

Private Sub Command2_Click()
quit
End Sub
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 06:45 , Processed in 0.467049 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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