田草博客

互联网田草博客


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

微信 公众号:ByCAD

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

用户登陆
用户:
密码:
 

站点日历
73 2024 - 4 48
 123456
78910111213
14151617181920
21222324252627
282930


站点统计

最新评论



App.Path for VB.NET/ASP.NET 把直线、圆弧合并成多段线(PL线)
未知 点到直线的垂足   [ 日期:2011-12-26 ]   [ 来自:本站原创 ]  HTML
    '点到直线的垂足
    ' P1 P2 为直线上的两点,确定了这条直线
    ' P3 为空间一点
    ' P4 为P3到直线P1P2的垂足
    Function P2LineP(ByVal P1() As Double, ByVal P2() As Double, ByVal P3() As Double) As Object
        '如果三点在一条直线上,则垂足就是P3点。
        '直线P1-P2的向量{M(0),M(1),M(2)}
        Dim M(5) As Double
        M(0) = P2(0) - P1(0)
        M(1) = P2(1) - P1(1)
        M(2) = P2(2) - P1(2)
        '直线P2-P3的向量{M(3),M(4),M(5)}
        M(3) = P2(0) - P3(0)
        M(4) = P2(1) - P3(1)
        M(5) = P2(2) - P3(2)

        Dim T As Double
        T = -(M(0) * M(3) + M(1) * M(4) + M(2) * M(5)) / (M(0) ^ 2 + M(1) ^ 2 + M(2) ^ 2)
        '垂足
        Dim P4(2) As Double
        P4(0) = M(0) * T + P2(0)
        P4(1) = M(1) * T + P2(1)
        P4(2) = M(2) * T + P2(2)
        Return P4
    End Function



http://bbs.mjtd.com/thread-81725-1-1.html

点到直线的垂足

 

        [CommandMethod("t11")]
        public static void Test11()
        {
            var db = HostApplicationServices.WorkingDatabase;
            var doc = Application.DocumentManager.GetDocument(db);
            var ed = doc.Editor;

            var resEnt = ed.GetEntity("\n请选择一条直线:");
            if (resEnt.Status != PromptStatus.OK)
                return;

            var resPnt = ed.GetPoint("\n请选择直线外的一点:");
            if (resPnt.Status != PromptStatus.OK)
                return;

            using (var tr = db.TransactionManager.StartTransaction())
            {
                Line line = resEnt.ObjectId.GetObject(OpenMode.ForRead) as Line;
                LineSegment3d ls3d = new LineSegment3d(line.StartPoint, line.EndPoint); ;
                Line3d l3d = new Line3d(line.StartPoint, line.EndPoint);

                Point3d pt1 = resPnt.Value;
                Point3d pt2 = l3d.GetClosestPointTo(pt1).Point;

                ed.WriteMessage
                (
                    "\n点{0}\n到直线的垂足为{1};\n距离为{2};\n在直线{3}",
                    pt1,
                    pt2,
                    (pt2 - pt1).Length,
                    ls3d.IsOn(pt2) ? "内" : "外"
                );

                ed.DrawVector(pt1, pt2, 1, false);

            }

        }



[本日志由 tiancao1001 于 2018-07-26 00:30 AM 编辑]


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

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

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