田草博客

互联网田草博客


网友交流QQ群:11740834 需注明申请加入原因

微信 公众号:ByCAD

邮箱:tiancao1001x126.com
ByCAD,微信公众号
首页 | 普通 | 电脑 | AutoCAD | VB/VB.NET | FLash | 结构 | 建筑 | 电影 | BIM | 规范 | 软件 | ID
-随机-|-分布-
-博客论坛-|-﨣﨤﨧﨨-
-网站导航-|-规范下载-
-BelovedFLash欣赏-

用户登陆
用户:
密码:
 

站点日历
73 2024 - 12 48
1234567
891011121314
15161718192021
22232425262728
293031


站点统计

最新评论



获取模型空间图纸空间的ObjectId的几种方法 CAD .net dwg SummaryInfo 图形属性
未知 多边形点集排序--针对凸多边形,按逆时针方向进行排序   [ 日期:2021-04-16 ]   [ 来自:转帖 ]  HTML
    Public Shared Sub ClockwiseSortPoints(vPoints As List(Of Point3D))
        '计算重心
        Dim center As New Point3D()
        Dim X As Double = 0, Y As Double = 0
        Dim i As Integer = 0
        While i < vPoints.Count
            X += vPoints(i).X
            Y += vPoints(i).Y
            i += 1
        End While
        center.X = CType(X, Integer) / vPoints.Count
        center.Y = CType(Y, Integer) / vPoints.Count
        '冒泡排序
        Dim i As Integer = 0
        While i < vPoints.Count - 1
            Dim j As Integer = 0
            While j < vPoints.Count - i - 1
                If PointCmp(vPoints(j), vPoints(j + 1), center) Then
                    Dim tmp As Point3D = vPoints(j)
                    vPoints(j) = vPoints(j + 1)
                    vPoints(j + 1) = tmp
                End If
                j += 1
            End While
            i += 1
        End While
    End Sub

    '若点a大于点b,即点a在点b顺时针方向,返回true,否则返回false
    Private Shared Function PointCmp(a As Point3D, b As Point3D, center As Point3D) As Boolean
        If a.X >= 0 AndAlso b.X < 0 Then
            Return True
        End If
        If a.X = 0 AndAlso b.X = 0 Then
            Return a.Y > b.Y
        End If
        '向量OA和向量OB的叉积
        Dim det As Integer = Convert.ToInt32((a.X - center.X) * (b.Y - center.Y) - (b.X - center.X) * (a.Y - center.Y))
        If det < 0 Then
            Return True
        End If
        If det > 0 Then
            Return False
        End If
        '向量OA和向量OB共线,以距离判断大小
        Dim d1 As Double = (a.X - center.X) * (a.X - center.X) + (a.Y - center.Y) * (a.Y - center.Y)
        Dim d2 As Double = (b.X - center.X) * (b.X - center.Y) + (b.Y - center.Y) * (b.Y - center.Y)
        Return d1 > d2
    End Function



暂时没有评论
发表评论 - 不要忘了输入验证码哦!
作者: 用户:  密码:   注册? 验证:  防止恶意留言请输入问题答案:2*6=?  
评论:

禁止表情
禁止UBB
禁止图片
识别链接
识别关键字

字体样式 文字大小 文字颜色
插入粗体文本 插入斜体文本 插入下划线
左对齐 居中对齐 右对齐
插入超级链接 插入邮件地址 插入图像
插入 Flash 插入代码 插入引用
插入列表 插入音频文件 插入视频文件
插入缩进符合
点击下载按钮 下标 上标
水平线 简介分割标记
表  情
 
Tiancao Blog All Rights Reserved 田草博客 版权所有
Copyright ©