using System;
using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
using PG;
namespace PG {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
//Works: color[2] = 0xFF | 0x99 | 0x99;
pgn.Add(Poly.Poly1); col[0] = Color.FromArgb(0xFF, 0xFF, 0x99, 0x99);
pgn.Add(Poly.Poly2); col[1] = Color.FromArgb(0xFF, 0x99, 0xFF, 0x99);
pgn.Add(Poly.Poly3); col[2] = Color.FromArgb(0xFF, 0x99, 0x99, 0xFF);
pgn.Add(Poly.Poly4); col[3] = Color.FromArgb(0xFF, 0x00, 0xFF, 0xFF);
pgn.Add(Poly.Poly5); col[4] = Color.FromArgb(0xFF, 0x99, 0xFF, 0x00);
bool b;
bool b2;
bool b3;
b = Poly.TwoConvexPolygonsDoIntersectI(Poly.Poly1, Poly.Poly2);
b2 = Poly.TwoConvexPolygonsDoIntersectII(Poly.Poly1, Poly.Poly2);
b3 = Poly.TwoConvexPolygonsDoIntersectIII(Poly.Poly1, Poly.Poly2);
con("(Yes.) Do Polygons 1,2 intersect? " + b + "," + b2 + "," + b3);
b = PG.Poly.TwoConvexPolygonsDoIntersectI(Poly.Poly3, Poly.Poly2);
b2 = PG.Poly.TwoConvexPolygonsDoIntersectII(Poly.Poly3, Poly.Poly2);
b3 = PG.Poly.TwoConvexPolygonsDoIntersectIII(Poly.Poly3, Poly.Poly2);
con("(No.) Do Polygons 2,3 intersect? " + b + "," + b2 + "," + b3);
b = PG.Poly.TwoConvexPolygonsDoIntersectI(Poly.Poly1, Poly.Poly3);
b2 = PG.Poly.TwoConvexPolygonsDoIntersectII(Poly.Poly1, Poly.Poly3);
b3 = PG.Poly.TwoConvexPolygonsDoIntersectIII(Poly.Poly1, Poly.Poly3);
con("(Yes.) Do Polygons 1,3 intersect? " + b + "," + b2 + "," + b3);
b = PG.Poly.TwoConvexPolygonsDoIntersectI(Poly.Poly1, Poly.Poly4);
b2 = PG.Poly.TwoConvexPolygonsDoIntersectII(Poly.Poly1, Poly.Poly4);
b3 = PG.Poly.TwoConvexPolygonsDoIntersectIII(Poly.Poly1, Poly.Poly4);
con("(No.) Do Polygons 1,4 intersect? " + b + "," + b2 + "," + b3);
b = PG.Poly.TwoConvexPolygonsDoIntersectI(Poly.Poly1, Poly.Poly5);
b2 = PG.Poly.TwoConvexPolygonsDoIntersectII(Poly.Poly1, Poly.Poly5);
b3 = PG.Poly.TwoConvexPolygonsDoIntersectIII(Poly.Poly1, Poly.Poly5);
con("(Yes. Interwoven.). Do Polygons 1,5 intersect? " + b + "," + b2 + "," + b3);
}
public void con(string s) {
textBox1.Text = textBox1.Text + s + "\r\n";
}
private void Form1_Load(object sender, EventArgs e) {
//=========================================================================
//To draw right on form:
this.BackColor = Color.Black;
this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);
//=========================================================================
}
#region drawpictures
/// <summary>
/// Auxilairy array to continuously draw pictures on form.
/// Stores polygons to be tested.
/// </summary>
static List<int[,]> pgn = new List<int[,]>();
//static List<int[]> color = new List<int[]>(6);
Color[] col = new Color[5];
static int shiftX = 100;
static int shiftY = 60;
static int scale = 10;
/// <summary>
/// Continuously draws polygons when paint event happens.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) {
//Draw coordinate axes:
Pen pn = new Pen(Color.White, 1);
e.Graphics.DrawLine(pn, new Point(0, shiftY), new Point(shiftX * 3, shiftY));
e.Graphics.DrawLine(pn, new Point(shiftX, shiftY * 2), new Point(shiftX, 0));
//Draw polygons with their own color:
//Each time po
for ( int i = 0; i < pgn.Count; i++) {
pn = new Pen(col[i], 2);
e.Graphics.DrawPath(pn, convertPolygonArrayToGraphicsPath(pgn[i]));
Font ft = new Font("Courier New", 11, FontStyle.Bold);
//Brush br = new SolidBrush(col[i]);
SolidBrush br = new SolidBrush(col[i]);
int wi = i % 3;
Point point = new Point(pgn[i][wi, 0] * scale + shiftX, -pgn[i][wi, 1] * scale + shiftY);
e.Graphics.DrawString(" " + (i+1), ft, br, point);
}
pn.Dispose();
}
/// <summary>
/// Converts polygons from integer array form to GraphicsPath form.
/// </summary>
/// <param name="p">Polygons as they defined in this package.</param>
/// <returns>Polygon converted to GraphicsPath which can be drawn on form.</returns>
private static GraphicsPath convertPolygonArrayToGraphicsPath(int[,] p) {
int nP = p.GetUpperBound(0) + 1;
Point[] ar = new Point[nP];
for (int i = 0; i < nP; i++) {
ar[i] = new Point(p[i, 0] * scale + shiftX, -p[i, 1] * scale + shiftY);
}
GraphicsPath gp = new GraphicsPath();
gp.AddPolygon(ar);
return gp;
}
#endregion //drawpictures
}
}
Copyright (C) 2008 Landkey Computers