在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#语言基础 → 纯C#实现的mspaint增强版画图程序

纯C#实现的mspaint增强版画图程序

C#语言基础

下载此实例
  • 开发语言:C#
  • 实例大小:0.17M
  • 下载次数:50
  • 浏览次数:888
  • 发布时间:2017-09-18
  • 实例类别:C#语言基础
  • 发 布 人:jackylh9527
  • 文件格式:.zip
  • 所需积分:2
 相关标签: C# 画图

实例介绍

【实例简介】纯C#实现的mspaint增强版画图程序,非常实用
【实例截图】

【核心代码】

/// <summary>
        /// 判断矩形是否包含了线段上的任何点
        /// </summary>       
        public static bool RectContainsPointOnLine(Rectangle rect, Point linePt1, Point linePt2)
        {
            if (rect.Contains(linePt1) || rect.Contains(linePt2))
                return true;
            Point rectPt1 = rect.Location;
            Point rectPt2 = new Point(rect.Left rect.Width, rect.Top);
            Point rectPt3 = new Point(rect.Left rect.Width, rect.Top rect.Height);
            Point rectPt4 = new Point(rect.Left, rect.Top rect.Height);

            return TwoLinesIntersect(linePt1, linePt2, rectPt1, rectPt2) ||
                TwoLinesIntersect(linePt1, linePt2, rectPt2, rectPt3) ||
                TwoLinesIntersect(linePt1, linePt2, rectPt3, rectPt4) ||
                TwoLinesIntersect(linePt1, linePt2, rectPt1, rectPt4);
        }

        /// <summary>
        /// 判断两条线段是否相交
        /// </summary>
        public static bool TwoLinesIntersect(Point pt11, Point pt12, Point pt21, Point pt22)
        {
            LineInfo info1 = GetLineInfo(pt11, pt12);
            LineInfo info2 = GetLineInfo(pt21, pt22);

            int pt1MinX = Math.Min(pt11.X, pt12.X);
            int pt1MaxX = Math.Max(pt11.X, pt12.X);
            int pt1MinY = Math.Min(pt11.Y, pt12.Y);
            int pt1MaxY = Math.Max(pt11.Y, pt12.Y);

            int pt2MinX = Math.Min(pt21.X, pt22.X);
            int pt2MaxX = Math.Max(pt21.X, pt22.X);
            int pt2MinY = Math.Min(pt21.Y, pt22.Y);
            int pt2MaxY = Math.Max(pt21.Y, pt22.Y);

            float x, y;

            if (info1.type == LineType.Vertical && info2.type == LineType.Vertical)
            {
                if (info1.x == info2.x)
                {
                    // 重合的平行线,有可能相交的
                    return (pt11.Y >= pt2MinY && pt11.Y <= pt2MaxY) || (pt12.Y >= pt2MinY && pt12.Y <= pt2MaxY)
                        || (pt21.Y >= pt1MinY && pt21.Y <= pt1MaxY);
                }
            }
            else if (info1.type == LineType.Horizontal && info2.type == LineType.Horizontal)
            {
                if (info1.y == info2.y)
                {
                    return (pt11.X >= pt2MinX && pt11.X <= pt2MaxX) || (pt12.X >= pt2MinX && pt12.X <= pt2MaxX)
                        || (pt21.X >= pt1MinX && pt21.X <= pt1MaxX);
                }
            }
            else if (info1.type == LineType.Normal && info2.type == LineType.Normal)
            {
                if (Math.Abs(info1.a - info2.a) < 0.001f)
                {
                    // 如果平行且重合
                    if (info1.b == info2.b)
                    {
                        return (pt11.X >= pt2MinX && pt11.X <= pt2MaxX)
                            || (pt12.X >= pt2MinX && pt12.X <= pt2MaxX)
                            || (pt21.X >= pt1MinX && pt21.X <= pt1MaxX);
                    }
                }
                else
                {
                    x = (info2.b - info1.b) / (info1.a - info2.a);
                    y = info1.a * x info1.b;
                    return (y >= pt1MinY && y <= pt1MaxY) && (y >= pt2MinY && y <= pt2MaxY);
                }
            }
            else if (info1.type == LineType.Horizontal && info2.type == LineType.Vertical)
            {
                return (info2.x >= pt1MinX && info2.x <= pt1MaxX && info1.y >= pt2MinY && info1.y <= pt2MaxY);                    
            }
            else if (info1.type == LineType.Vertical && info2.type == LineType.Horizontal)
            {
                return (info1.x >= pt2MinX && info1.x <= pt2MaxX && info2.y >= pt1MinY && info2.y <= pt1MaxY);
            }
            else if (info1.type == LineType.Horizontal && info2.type == LineType.Normal)
            {
                y = info1.y;
                x = (y - info2.b) / info2.a;
                return (x >= pt1MinX && x <= pt1MaxX) && (x >= pt2MinX && x <= pt2MaxX);
            }
            else if (info1.type == LineType.Normal && info2.type == LineType.Horizontal)
            {
                y = info2.y;
                x = (y - info1.b) / info1.a;
                return (x >= pt1MinX && x <= pt1MaxX) && (x >= pt2MinX && x <= pt2MaxX);
            }
            else if (info1.type == LineType.Vertical && info2.type == LineType.Normal)
            {
                x = info1.x;
                y = info2.a * x info2.b;
                return (y >= pt1MinY && y <= pt1MaxY) && (y >= pt2MinY && y <= pt2MaxY);
            }
            else if (info1.type == LineType.Normal && info2.type == LineType.Vertical)
            {
                x = info2.x;
                y = info1.a * x info1.b;
                return (y >= pt1MinY && y <= pt1MaxY) && (y >= pt2MinY && y <= pt2MaxY);
            }

            return false;
        }

标签: C# 画图

实例下载地址

纯C#实现的mspaint增强版画图程序

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警