5. 找出任意區塊間所有重疊區域之系統
using System.Drawing.Drawing2D;
namespace Q5
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button3_Click(object sender, EventArgs e)
{
Close();
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
for (int i = 0; i < blocks.Count; i++)
{
Rectangle item = blocks[i];
var pen = new Pen(
i == 0 ? Brushes.Red : i == 1 ? Brushes.Orange : i == 2 ? Brushes.Green : Brushes.Black
, 2);
pen.DashStyle = i == 0 ? DashStyle.Solid : i == 1 ? DashStyle.Dot : i == 2 ? DashStyle.Dash : DashStyle.DashDotDot;
e.Graphics.DrawRectangle(pen, item.X, 400 - item.Y - item.Height, item.Width, item.Height);
}
}
private void panel2_Paint(object sender, PaintEventArgs e)
{
if (!show) return;
for (int i = 0; i < blocks.Count; i++)
{
Rectangle item = blocks[i];
var pen = new Pen(
i == 0 ? Brushes.Red : i == 1 ? Brushes.Orange : i == 2 ? Brushes.Green : Brushes.Black
, 2);
pen.DashStyle = i == 0 ? DashStyle.Solid : i == 1 ? DashStyle.Dot : i == 2 ? DashStyle.Dash : DashStyle.DashDotDot;
e.Graphics.DrawRectangle(pen, item.X, 400 - item.Y - item.Height, item.Width, item.Height);
}
var overlapped = new List<Rectangle>();
foreach (var item in blocks)
{
foreach (var item1 in blocks)
{
if (item == item1) continue;
if (!item.IntersectsWith(item1))
{
continue;
}
var t = new Rectangle(item.Location, item.Size);
t.Intersect(item1); // 沒說不准用 笑死
overlapped.Add(t);
}
}
foreach (var item in overlapped)
{
e.Graphics.FillRectangle(Brushes.Red,
new Rectangle(item.X, 400 - item.Y - item.Height, item.Width, item.Height));
}
}
List<Rectangle> blocks = new();
bool show = false;
Random rd = new Random();
private void button1_Click(object sender, EventArgs e)
{
show = false;
blocks.Clear();
for (int i = 0, v = rd.Next(3) + 2; i < v; i++)
{
blocks.Add(new Rectangle(rd.Next(20, 81), rd.Next(20, 81), rd.Next(40, 201), rd.Next(40, 201)));
}
panel1.Refresh();
}
private void button2_Click(object sender, EventArgs e)
{
show = true;
panel2.Refresh();
}
}
}
Last updated