private void button2_Click(object sender, EventArgs e) { label2.Text = ""; k = 4; string[] dots = System.IO.File.ReadAllLines(openFileDialog1.FileName); try { n = int.Parse(dots[0]); } catch (Exception ex) { label2.Text = "Napacan vnos1!"; return; } if (n < 3) { label2.Text = "Vnesite stevilo tock vecji od 2!"; return; } niz = new Point[n]; tniz = new Trougao[(n + 3) * (n + 2) * (n + 1) / 6]; int max = 0; try { for (int i = 0; i < n; i++) { string[] tacke = dots[i + 1].Split(); niz[i] = new Point(); niz[i].X = int.Parse(tacke[0]); niz[i].Y = int.Parse(tacke[1]); for (int j = 0; j < i; j++) { for (int l = 0; l < i; l++) { if (l != j) { if (Math.Sign((niz[j].X - niz[i].X) * (niz[l].Y - niz[i].Y) - (niz[j].Y - niz[i].Y) * (niz[l].X - niz[i].X)) == 0 || Math.Sign((niz[i].X - niz[j].X) * (niz[l].Y - niz[j].Y) - (niz[i].Y - niz[j].Y) * (niz[l].X - niz[j].X)) == 0 || Math.Sign((niz[j].X - niz[l].X) * (niz[i].Y - niz[l].Y) - (niz[i].Y - niz[l].Y) * (niz[i].X - niz[l].X)) == 0) { label2.Text = "Napacan vnos!"; return; } } } } if (Math.Sqrt((niz[i].X - 288) * (niz[i].X - 288) + (niz[i].Y - 250) * (niz[i].Y - 250)) > max) { max = (int)(Math.Sqrt((niz[i].X - 288) * (niz[i].X - 288) + (niz[i].Y - 250) * (niz[i].Y - 250)) * 1.5); } } } catch (Exception ex) { label2.Text = "Napacan vnos2!"; return; } tniz[0] = new Trougao(new Point(-2 * max + 288, 250), new Point(max + 288, (int)(max * 3 / Math.Sqrt(3)) + 250), new Point(max + 288, -(int)(max * 3 / Math.Sqrt(3)) + 250)); tniz[1] = new Trougao(new Point(niz[0].X, niz[0].Y), new Point(-2 * max + 288, 250), new Point(max + 288, (int)(max * 3 / Math.Sqrt(3)) + 250)); tniz[2] = new Trougao(new Point(niz[0].X, niz[0].Y), new Point(-2 * max + 288, 250), new Point(max + 288, -(int)(max * 3 / Math.Sqrt(3)) + 250)); tniz[3] = new Trougao(new Point(niz[0].X, niz[0].Y), new Point(max + 288, (int)(max * 3 / Math.Sqrt(3)) + 250), new Point(max + 288, -(int)(max * 3 / Math.Sqrt(3)) + 250)); for (int i = 1; i < n; i++) { //if (niz[i]!=new Point(0,0)) trian(niz[i]); } iscrtaj(); }
void trian(Point p) { int ind = 0; bool b = false; Trougao pom = new Trougao(new Point(250, 250), new Point(250, 250), new Point(250, 250)); for (int i = 1; i < k && b == false; i++) { if ((Math.Sign((tniz[i].t2().X - tniz[i].t1().X) * (p.Y - tniz[i].t1().Y) - (tniz[i].t2().Y - tniz[i].t1().Y) * (p.X - tniz[i].t1().X)) == Math.Sign((tniz[i].t2().X - tniz[i].t1().X) * (tniz[i].t3().Y - tniz[i].t1().Y) - (tniz[i].t2().Y - tniz[i].t1().Y) * (tniz[i].t3().X - tniz[i].t1().X))) && //|| Math.Sign((tniz[i].t2().X - tniz[i].t1().X) * (p.Y - tniz[i].t1().Y) - (tniz[i].t2().Y - tniz[i].t1().Y) * (p.X - tniz[i].t1().X)) == 0) && (Math.Sign((tniz[i].t3().X - tniz[i].t1().X) * (p.Y - tniz[i].t1().Y) - (tniz[i].t3().Y - tniz[i].t1().Y) * (p.X - tniz[i].t1().X)) == Math.Sign((tniz[i].t3().X - tniz[i].t1().X) * (tniz[i].t2().Y - tniz[i].t1().Y) - (tniz[i].t3().Y - tniz[i].t1().Y) * (tniz[i].t2().X - tniz[i].t1().X))) && //|| Math.Sign((tniz[i].t3().X - tniz[i].t1().X) * (p.Y - tniz[i].t1().Y) - (tniz[i].t3().Y - tniz[i].t1().Y) * (p.X - tniz[i].t1().X))==0) && (Math.Sign((tniz[i].t2().X - tniz[i].t3().X) * (p.Y - tniz[i].t3().Y) - (tniz[i].t2().Y - tniz[i].t3().Y) * (p.X - tniz[i].t3().X)) == Math.Sign((tniz[i].t2().X - tniz[i].t3().X) * (tniz[i].t1().Y - tniz[i].t3().Y) - (tniz[i].t2().Y - tniz[i].t3().Y) * (tniz[i].t1().X - tniz[i].t3().X)))) //|| Math.Sign((tniz[i].t2().X - tniz[i].t3().X) * (p.Y - tniz[i].t3().Y) - (tniz[i].t2().Y - tniz[i].t3().Y) * (p.X - tniz[i].t3().X))==0)) { b = true; //if (Math.Sign((tniz[i].t2().X - tniz[i].t1().X) * (p.Y - tniz[i].t1().Y) - (tniz[i].t2().Y - tniz[i].t1().Y) * (p.X - tniz[i].t1().X)) != 0 && Math.Sign((tniz[i].t3().X - tniz[i].t1().X) * (p.Y - tniz[i].t1().Y) - (tniz[i].t3().Y - tniz[i].t1().Y) * (p.X - tniz[i].t1().X)) != 0 && Math.Sign((tniz[i].t2().X - tniz[i].t3().X) * (p.Y - tniz[i].t3().Y) - (tniz[i].t2().Y - tniz[i].t3().Y) * (p.X - tniz[i].t3().X)) != 0) //{ tniz[k++] = new Trougao(tniz[i].t1(), tniz[i].t3(), p); tniz[k++] = new Trougao(tniz[i].t2(), tniz[i].t3(), p); ind = i; pom = tniz[i]; tniz[i] = new Trougao(tniz[i].t1(), tniz[i].t2(), p); /*} * else * { * for (int j = 0; j < n; j++) * { * if (niz[i] == p) { niz[i] = new Point(250, 250); } * } * }*/ } } double x, y, r; for (int i = 1; i < k && ind != 0; i++) { if (i != ind && i != k - 1 && i != k - 2) { if ((tniz[i].t1() == pom.t1() && tniz[i].t2() == pom.t2()) || (tniz[i].t1() == pom.t2() && tniz[i].t2() == pom.t1()) || (tniz[i].t1() == pom.t2() && tniz[i].t2() == pom.t3()) || (tniz[i].t1() == pom.t3() && tniz[i].t2() == pom.t2()) || (tniz[i].t1() == pom.t1() && tniz[i].t2() == pom.t3()) || (tniz[i].t1() == pom.t3() && tniz[i].t2() == pom.t1()) || (tniz[i].t1() == pom.t1() && tniz[i].t3() == pom.t2()) || (tniz[i].t1() == pom.t2() && tniz[i].t3() == pom.t1()) || (tniz[i].t1() == pom.t2() && tniz[i].t3() == pom.t3()) || (tniz[i].t1() == pom.t3() && tniz[i].t3() == pom.t2()) || (tniz[i].t1() == pom.t1() && tniz[i].t3() == pom.t3()) || (tniz[i].t1() == pom.t3() && tniz[i].t3() == pom.t1()) || (tniz[i].t3() == pom.t1() && tniz[i].t2() == pom.t2()) || (tniz[i].t3() == pom.t2() && tniz[i].t2() == pom.t1()) || (tniz[i].t3() == pom.t2() && tniz[i].t2() == pom.t3()) || (tniz[i].t3() == pom.t3() && tniz[i].t2() == pom.t2()) || (tniz[i].t3() == pom.t1() && tniz[i].t2() == pom.t3()) || (tniz[i].t3() == pom.t3() && tniz[i].t2() == pom.t1())) { double f1, g1, f2, g2; Point m1, m2; f1 = (double)(tniz[i].t2().X - tniz[i].t1().X) / (tniz[i].t1().Y - tniz[i].t2().Y); m1 = new Point((tniz[i].t1().X + tniz[i].t2().X) / 2, (tniz[i].t1().Y + tniz[i].t2().Y) / 2); g1 = m1.Y - f1 * m1.X; f2 = (double)(tniz[i].t3().X - tniz[i].t2().X) / (tniz[i].t2().Y - tniz[i].t3().Y); m2 = new Point((tniz[i].t2().X + tniz[i].t3().X) / 2, (tniz[i].t2().Y + tniz[i].t3().Y) / 2); g2 = m2.Y - f2 * m2.X; if (f1 == f2) { label2.Text = "Napacni vnos3!"; x = 2000; y = 2000; } else if (tniz[i].t1().Y == tniz[i].t2().Y) { x = m1.X; y = f2 * m1.X + g2; } else if (tniz[i].t1().Y == tniz[i].t2().Y) { x = m1.X; y = f2 * m1.X + g2; } else { x = (g2 - g1) / (f1 - f2); y = f1 * x + g1; } r = Math.Sqrt((tniz[i].t1().X - x) * (tniz[i].t1().X - x) + (tniz[i].t1().Y - y) * (tniz[i].t1().Y - y)); Point p1 = new Point(), p2 = new Point(), p3 = new Point(); if (Math.Sign((tniz[i].t2().X - tniz[i].t1().X) * (p.Y - tniz[i].t1().Y) - (tniz[i].t2().Y - tniz[i].t1().Y) * (p.X - tniz[i].t1().X)) != Math.Sign((tniz[i].t2().X - tniz[i].t1().X) * (tniz[i].t3().Y - tniz[i].t1().Y) - (tniz[i].t2().Y - tniz[i].t1().Y) * (tniz[i].t3().X - tniz[i].t1().X))) { p1 = tniz[i].t1(); p3 = tniz[i].t2(); p2 = tniz[i].t3(); } else if (Math.Sign((tniz[i].t3().X - tniz[i].t1().X) * (p.Y - tniz[i].t1().Y) - (tniz[i].t3().Y - tniz[i].t1().Y) * (p.X - tniz[i].t1().X)) != Math.Sign((tniz[i].t3().X - tniz[i].t1().X) * (tniz[i].t2().Y - tniz[i].t1().Y) - (tniz[i].t3().Y - tniz[i].t1().Y) * (tniz[i].t2().X - tniz[i].t1().X))) { p1 = tniz[i].t1(); p3 = tniz[i].t3(); p2 = tniz[i].t2(); } else if (Math.Sign((tniz[i].t3().X - tniz[i].t2().X) * (p.Y - tniz[i].t2().Y) - (tniz[i].t3().Y - tniz[i].t2().Y) * (p.X - tniz[i].t2().X)) != Math.Sign((tniz[i].t3().X - tniz[i].t2().X) * (tniz[i].t1().Y - tniz[i].t2().Y) - (tniz[i].t3().Y - tniz[i].t2().Y) * (tniz[i].t1().X - tniz[i].t2().X))) { p1 = tniz[i].t2(); p3 = tniz[i].t3(); p2 = tniz[i].t1(); } if (r > Math.Sqrt((x - p.X) * (x - p.X) + (y - p.Y) * (y - p.Y))) { if (p != p1 && p != p2 && p != p3) { tniz[i] = new Trougao(p, p1, p2); int kk; if ((tniz[ind].t1() == p1 || tniz[ind].t2() == p1 || tniz[ind].t3() == p1) && (tniz[ind].t1() == p3 || tniz[ind].t2() == p3 || tniz[ind].t3() == p3)) { kk = ind; } else if ((tniz[k - 2].t1() == p1 || tniz[k - 2].t2() == p1 || tniz[k - 2].t3() == p1) && (tniz[k - 2].t1() == p3 || tniz[k - 2].t2() == p3 || tniz[k - 2].t3() == p3)) { kk = k - 2; } else { kk = k - 1; } tniz[kk] = new Trougao(p, p2, p3); //ispitaj(p, p2); proveri(p, p1, p2, p3, i, kk); } } } } } }
private void button3_Click(object sender, EventArgs e) { label2.Text = ""; k = 4; if (n < 3) { label2.Text = "Vnesite stevilo tock vecji od 2!"; return; } Random r = new Random(); int max = 0; string[] s = new string[n]; niz = new Point[n]; tniz = new Trougao[(n + 3) * (n + 2) * (n + 1) / 6]; for (int i = 0; i < n; i++) { bool b = false, c = false; niz[i] = new Point(); //int rr = r.Next(0, 500); niz[i].X = r.Next(0, 500); //niz[i].X = 88 + rr; //rr = r.Next(0, 100); niz[i].Y = r.Next(0, 500); s[i] = niz[i].X + " " + niz[i].Y; //niz[i].Y = 50 + rr; for (int j = 0; j < i; j++) { for (int l = 0; l < i; l++) { if (l != j) { if (Math.Sign((niz[j].X - niz[i].X) * (niz[l].Y - niz[i].Y) - (niz[j].Y - niz[i].Y) * (niz[l].X - niz[i].X)) == 0 || Math.Sign((niz[i].X - niz[j].X) * (niz[l].Y - niz[j].Y) - (niz[i].Y - niz[j].Y) * (niz[l].X - niz[j].X)) == 0 || Math.Sign((niz[j].X - niz[l].X) * (niz[i].Y - niz[l].Y) - (niz[i].Y - niz[l].Y) * (niz[i].X - niz[l].X)) == 0) { i--; b = true; break; } } if (b == true) { break; } } if (b == true) { break; } } if (b == false && c == false && Math.Sqrt((niz[i].X - 288) * (niz[i].X - 288) + (niz[i].Y - 250) * (niz[i].Y - 250)) > max) { max = (int)(Math.Sqrt((niz[i].X - 288) * (niz[i].X - 288) + (niz[i].Y - 250) * (niz[i].Y - 250)) * 1.5); } } System.IO.File.WriteAllLines("mojprimer.txt", s); tniz[0] = new Trougao(new Point(-2 * max + 288, 250), new Point(max + 288, (int)(max * 3 / Math.Sqrt(3)) + 250), new Point(max + 288, -(int)(max * 3 / Math.Sqrt(3)) + 250)); tniz[1] = new Trougao(new Point(niz[0].X, niz[0].Y), new Point(-2 * max + 288, 250), new Point(max + 288, (int)(max * 3 / Math.Sqrt(3)) + 250)); tniz[2] = new Trougao(new Point(niz[0].X, niz[0].Y), new Point(-2 * max + 288, 250), new Point(max + 288, -(int)(max * 3 / Math.Sqrt(3)) + 250)); tniz[3] = new Trougao(new Point(niz[0].X, niz[0].Y), new Point(max + 288, (int)(max * 3 / Math.Sqrt(3)) + 250), new Point(max + 288, -(int)(max * 3 / Math.Sqrt(3)) + 250)); for (int i = 1; i < n; i++) { trian(niz[i]); } iscrtaj(); }
void proveri(Point p, Point p1, Point p2, Point p3, int kk1, int kk2) { double x, y, r; for (int i = 1; i < k; i++) { if ((((tniz[i].t1() == p && tniz[i].t2() == p1) || (tniz[i].t1() == p1 && tniz[i].t2() == p)) && tniz[i].t3() != p2) || (((tniz[i].t1() == p && tniz[i].t3() == p1) || (tniz[i].t1() == p1 && tniz[i].t3() == p)) && tniz[i].t2() != p2) || (((tniz[i].t2() == p && tniz[i].t3() == p1) || (tniz[i].t2() == p1 && tniz[i].t3() == p)) && tniz[i].t1() != p2) || (((tniz[i].t1() == p && tniz[i].t2() == p3) || (tniz[i].t1() == p3 && tniz[i].t2() == p)) && tniz[i].t3() != p2) || (((tniz[i].t1() == p && tniz[i].t3() == p3) || (tniz[i].t1() == p3 && tniz[i].t3() == p)) && tniz[i].t2() != p2) || (((tniz[i].t2() == p && tniz[i].t3() == p3) || (tniz[i].t2() == p3 && tniz[i].t3() == p)) && tniz[i].t1() != p2) || (((tniz[i].t1() == p1 && tniz[i].t2() == p2) || (tniz[i].t1() == p2 && tniz[i].t2() == p1)) && tniz[i].t3() != p) || (((tniz[i].t1() == p1 && tniz[i].t3() == p2) || (tniz[i].t1() == p2 && tniz[i].t3() == p1)) && tniz[i].t2() != p) || (((tniz[i].t2() == p1 && tniz[i].t3() == p2) || (tniz[i].t2() == p2 && tniz[i].t3() == p1)) && tniz[i].t1() != p) || (((tniz[i].t1() == p3 && tniz[i].t2() == p2) || (tniz[i].t1() == p2 && tniz[i].t2() == p3)) && tniz[i].t3() != p) || (((tniz[i].t1() == p3 && tniz[i].t3() == p2) || (tniz[i].t1() == p2 && tniz[i].t3() == p3)) && tniz[i].t2() != p) || (((tniz[i].t2() == p3 && tniz[i].t3() == p2) || (tniz[i].t2() == p2 && tniz[i].t3() == p3)) && tniz[i].t1() != p)) //nesto se tu poziva sto izaziva gresku { if (tniz[i].t1() == p || tniz[i].t2() == p || tniz[i].t3() == p) { p = p2; } double f1, g1, f2, g2; Point m1, m2; f1 = (double)(tniz[i].t2().X - tniz[i].t1().X) / (tniz[i].t1().Y - tniz[i].t2().Y); m1 = new Point((tniz[i].t1().X + tniz[i].t2().X) / 2, (tniz[i].t1().Y + tniz[i].t2().Y) / 2); g1 = m1.Y - f1 * m1.X; f2 = (double)(tniz[i].t3().X - tniz[i].t2().X) / (tniz[i].t2().Y - tniz[i].t3().Y); m2 = new Point((tniz[i].t2().X + tniz[i].t3().X) / 2, (tniz[i].t2().Y + tniz[i].t3().Y) / 2); g2 = m2.Y - f2 * m2.X; if (f1 == f2) { label2.Text = "Napacni vnos4!"; x = 2000; y = 2000; } else if (tniz[i].t1().Y == tniz[i].t2().Y) { x = m1.X; y = f2 * m1.X + g2; } else if (tniz[i].t1().Y == tniz[i].t2().Y) { x = m1.X; y = f2 * m1.X + g2; } else { x = (g2 - g1) / (f1 - f2); y = f1 * x + g1; } r = Math.Sqrt((tniz[i].t1().X - x) * (tniz[i].t1().X - x) + (tniz[i].t1().Y - y) * (tniz[i].t1().Y - y)); Point pp1 = new Point(), pp2 = new Point(), pp3 = new Point(); if (Math.Sign((tniz[i].t2().X - tniz[i].t1().X) * (p.Y - tniz[i].t1().Y) - (tniz[i].t2().Y - tniz[i].t1().Y) * (p.X - tniz[i].t1().X)) != Math.Sign((tniz[i].t2().X - tniz[i].t1().X) * (tniz[i].t3().Y - tniz[i].t1().Y) - (tniz[i].t2().Y - tniz[i].t1().Y) * (tniz[i].t3().X - tniz[i].t1().X))) { pp1 = tniz[i].t1(); pp3 = tniz[i].t2(); pp2 = tniz[i].t3(); } else if (Math.Sign((tniz[i].t3().X - tniz[i].t1().X) * (p.Y - tniz[i].t1().Y) - (tniz[i].t3().Y - tniz[i].t1().Y) * (p.X - tniz[i].t1().X)) != Math.Sign((tniz[i].t3().X - tniz[i].t1().X) * (tniz[i].t2().Y - tniz[i].t1().Y) - (tniz[i].t3().Y - tniz[i].t1().Y) * (tniz[i].t2().X - tniz[i].t1().X))) { pp1 = tniz[i].t1(); pp3 = tniz[i].t3(); pp2 = tniz[i].t2(); } else if (Math.Sign((tniz[i].t3().X - tniz[i].t2().X) * (p.Y - tniz[i].t2().Y) - (tniz[i].t3().Y - tniz[i].t2().Y) * (p.X - tniz[i].t2().X)) != Math.Sign((tniz[i].t3().X - tniz[i].t2().X) * (tniz[i].t1().Y - tniz[i].t2().Y) - (tniz[i].t3().Y - tniz[i].t2().Y) * (tniz[i].t1().X - tniz[i].t2().X))) { pp1 = tniz[i].t2(); pp3 = tniz[i].t3(); pp2 = tniz[i].t1(); } if (r > Math.Sqrt((x - p.X) * (x - p.X) + (y - p.Y) * (y - p.Y))) { if (p != p1 && p != p2 && p != p3) { int kk; if ((pp1 == p1 || pp2 == p1)) { kk = kk1; //p == p1 || } else { kk = kk2; } tniz[i] = new Trougao(p, pp1, pp2); tniz[kk] = new Trougao(p, pp2, pp3); proveri(p, pp1, pp2, pp3, i, kk); } } } } }