Нарисовать треугольники - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Задача заключается в том, что на 7 Panel при запуске должны рисоваться рандомные треугольники. Посмотрите, пожалуйста, где ошибка. Всё собирается, но не работает.
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. namespace Lab_3_29 {
  10. public partial class Form1 : Form {
  11. double[] nx, ny;
  12. const int NP = 100;
  13. Random r = new Random();
  14. const int WH = 200;
  15. private int cshft, pshft;
  16. Color[] col,colors;
  17. Panel[] panels;
  18. PointF[] points;
  19. int np,pn,cn;
  20.  
  21. void GenPoints() {
  22. for (int i = 0; i < NP; i++) {
  23. nx[i] = r.NextDouble() * WH;
  24. ny[i] = r.NextDouble() * WH;
  25. }
  26. for (int i = 0; i < NP; i++) pshft = r.Next(NP);
  27. }
  28. public Form1() {
  29. InitializeComponent();
  30. nx = new double[NP]; ny = new double[NP]; points = new PointF[21]; colors = new Color[7];
  31. col = new Color[] { Color.Red, Color.Orange, Color.Yellow, Color.Green, Color.Blue, Color.BlueViolet, Color.LemonChiffon, Color.Lime, Color.Magenta, Color.Brown };
  32. GenPoints();
  33. cshft = r.Next(10);
  34. panels = new Panel[7];
  35. panels[0] = panel1; panels[1] = panel2; panels[2] = panel3; panels[3] = panel4; panels[4] = panel5; panels[5] = panel6; panels[6] = panel7;
  36. Init();
  37. }
  38. private void panels_Paint(object sender, PaintEventArgs e) {
  39. PointF[] pnts = new PointF[3];
  40. Graphics g = e.Graphics;
  41. Pen p = new Pen(colors[np], 1);
  42. Brush b = new SolidBrush(colors[np]);
  43. pnts[0] = points[0 + np * 3];
  44. pnts[1] = points[1 + np * 3];
  45. pnts[2] = points[2 + np * 3];
  46. g.DrawClosedCurve(p, pnts);
  47. g.FillClosedCurve(b, pnts);
  48. panels[np].Invalidate();
  49. }
  50. private void Init() {
  51. pn = pshft;
  52. for (int i = 0; i < 21; i++) {
  53. pn %= NP;
  54. points[i] = new PointF((float)nx[pn], (float)ny[pn]);
  55. pn++;
  56. }
  57. cn = cshft;
  58. for (int i = 0; i < 7; i++) {
  59. cn %= 10;
  60. colors[i] = col[cn];
  61. cn++;
  62. }
  63. for (np = 0; np < 7; np++) {
  64. panels[np].Paint += new PaintEventHandler(panels_Paint);
  65. }
  66. }
  67. private void bColor_Click(object sender, EventArgs e) {
  68. cshft = r.Next(10);
  69. Init();
  70. }
  71. private void bPlace_Click(object sender, EventArgs e) {
  72. pshft = r.Next(NP);
  73. Init();
  74. }
  75. }
  76. }

Решение задачи: «Нарисовать треугольники»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9.  
  10. namespace Lab_3_29 {
  11.   public partial class Form1 : Form {
  12.  
  13.     double[] nx, ny;
  14.     const int NP = 100;
  15.     Random r = new Random();
  16.     const int WH = 200;
  17.     private int cshft, pshft;
  18.     Color[] col,colors;
  19.     Panel[] panels;
  20.     PointF[] points;
  21.     PointF[] pnts;
  22.     int np,pn,cn;
  23.  
  24.  
  25.     void GenPoints() {
  26.       for (int i = 0; i < NP; i++) {
  27.         nx[i] = r.NextDouble() * WH;
  28.         ny[i] = r.NextDouble() * WH;
  29.       }
  30.       for (int i = 0; i < NP; i++) pshft = r.Next(NP);
  31.     }
  32.  
  33.     public Form1() {
  34.       InitializeComponent();
  35.       nx = new double[NP]; ny = new double[NP]; points = new PointF[21]; colors = new Color[7];
  36.       col = new Color[] { Color.Red, Color.Orange, Color.Yellow, Color.Green, Color.Blue, Color.BlueViolet, Color.LemonChiffon, Color.Lime, Color.Magenta, Color.Brown };
  37.       GenPoints();
  38.       cshft = r.Next(10);
  39.       panels = new Panel[7];
  40.       panels[0] = panel1; panels[1] = panel2; panels[2] = panel3; panels[3] = panel4; panels[4] = panel5; panels[5] = panel6; panels[6] = panel7;
  41.       Init();
  42.     }
  43.  
  44.     private void panels_Paint(object sender, PaintEventArgs e) {
  45.       pnts = new PointF[3];
  46.       Graphics g = e.Graphics;
  47.       Pen p = new Pen(col[np], 2);
  48.       Brush b = new SolidBrush(col[np]);
  49.       pnts[0] = new Point(100, 56);
  50.       pnts[1] = new Point(45, 123);
  51.       pnts[2] = new Point(12, 40);
  52.       g.DrawPolygon(p, pnts);
  53.       g.FillPolygon(b, pnts);
  54.       Invalidate();
  55.     }
  56.  
  57.     private void Init() {
  58.       pn = pshft;
  59.       for (int i = 0; i < 21; i++) {
  60.         pn %= NP;
  61.         points[i] = new PointF((float)nx[pn], (float)ny[pn]);
  62.         pn++;
  63.       }
  64.      
  65.       cn = cshft;
  66.       for (int i = 0; i < 7; i++) {
  67.         cn %= 10;
  68.         colors[i] = col[cn];
  69.         cn++;
  70.       }
  71.       for (np = 0; np < 7; np++) {
  72.         panels[np].Paint += new PaintEventHandler(panels_Paint);
  73.       }
  74.     }
  75.  
  76.     private void bColor_Click(object sender, EventArgs e) {
  77.       cshft = r.Next(10);
  78.       Init();
  79.     }
  80.  
  81.     private void bPlace_Click(object sender, EventArgs e) {
  82.       pshft = r.Next(NP);
  83.       Init();
  84.     }
  85.  
  86.   }
  87. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы