计算机图形学 c#实现 多边形相关算法

计算机图形学 c#实现 多边形相关算法

1.鼠标画多边形

画图首先需要画板,即GDI+的Graphics类。

为了在全局中使用Graphics类。

  1. 首先定义全局变量

​ List pt1 = new List(); 记录鼠标点击的点坐标
​ int num1 = 0; 记录个数
​ Point mouseLocation; 记录鼠标移动的坐标
​ Graphics g; 定义画图类

在这里插入图片描述

  1. 往界面中拖入pictureBox1,添加事件pictureBox1_Paint

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-90qZIHsq-1597068216751)(assets/1596978963768.png)]

  1. 将picturebox1与画图类绑定,则picturebox1为我们的画板

在这里插入图片描述

  1. 为了获得鼠标点击的坐标,在click函数中是没有e.location这个属性的,只能通过pictureBox1_MouseMove中记录下e.location。
        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            this.mouseLocation = e.Location;
        }
         private void pictureBox1_Click(object sender, EventArgs e)
        {
            if (flag && type==1)
            {
                num1++;
                pt1.Add(this.mouseLocation);
                if (num1 > 1)
                    g.DrawLine(Pens.Black, pt1[num1 - 2], pt1[num1 - 1]);//画直线
            }
        }
  1. 右键,将多边形首尾相连,画图结束。c#和MFC不一样,MFC的左键点击和右键点击函数不一样,c#只有通过添加pictureBox1_MouseDown函数,再通过判断e.Button == MouseButtons.Right来判断

在这里插入图片描述

2.判断多边形是否有效

主要是判断多边形是否自相交

我写的逻辑可能有点复杂?不知道能不能说清楚

简单来说,就是判断两条没有公共顶点的线,其交点在不在线段上

在polygon类里定义一个isvalid函数。调用ifintersect函数,判断线段a1b1在a2b2的交点,是否在范围内

        public bool isvalid()
        {
            //至少三个顶点
            if (num < 3)
                return false;
            //判断多边形是否相交
            f
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值