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

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

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

Здравствуйте! Задача заключается в том, что на 7 Panel при запуске должны рисоваться рандомные треугольники. Посмотрите, пожалуйста, где ошибка. Всё собирается, но не работает.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace Lab_3_29 {
  public partial class Form1 : Form {
 
    double[] nx, ny;
    const int NP = 100;
    Random r = new Random();
    const int WH = 200;
    private int cshft, pshft;
    Color[] col,colors;
    Panel[] panels;
    PointF[] points;
    int np,pn,cn;

    void GenPoints() {
      for (int i = 0; i < NP; i++) {
        nx[i] = r.NextDouble() * WH;
        ny[i] = r.NextDouble() * WH;
      }
      for (int i = 0; i < NP; i++) pshft = r.Next(NP);
    }
 
    public Form1() {
      InitializeComponent();
      nx = new double[NP]; ny = new double[NP]; points = new PointF[21]; colors = new Color[7];
      col = new Color[] { Color.Red, Color.Orange, Color.Yellow, Color.Green, Color.Blue, Color.BlueViolet, Color.LemonChiffon, Color.Lime, Color.Magenta, Color.Brown };
      GenPoints();
      cshft = r.Next(10);
      panels = new Panel[7];
      panels[0] = panel1; panels[1] = panel2; panels[2] = panel3; panels[3] = panel4; panels[4] = panel5; panels[5] = panel6; panels[6] = panel7;
      Init();
    }
 
    private void panels_Paint(object sender, PaintEventArgs e) {
      PointF[] pnts = new PointF[3];
      Graphics g = e.Graphics;
      Pen p = new Pen(colors[np], 1);
      Brush b = new SolidBrush(colors[np]);
      pnts[0] = points[0 + np * 3];
      pnts[1] = points[1 + np * 3];
      pnts[2] = points[2 + np * 3];
      g.DrawClosedCurve(p, pnts);
      g.FillClosedCurve(b, pnts);
      panels[np].Invalidate();
    }
 
    private void Init() {
      pn = pshft;
      for (int i = 0; i < 21; i++) {
        pn %= NP;
        points[i] = new PointF((float)nx[pn], (float)ny[pn]);
        pn++;
      }
      cn = cshft;
      for (int i = 0; i < 7; i++) {
        cn %= 10;
        colors[i] = col[cn];
        cn++;
      }
      for (np = 0; np < 7; np++) {
        panels[np].Paint += new PaintEventHandler(panels_Paint);
      }
    }
 
    private void bColor_Click(object sender, EventArgs e) {
      cshft = r.Next(10);
      Init();
    }
 
    private void bPlace_Click(object sender, EventArgs e) {
      pshft = r.Next(NP);
      Init();
    }
 
  }
}

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

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace Lab_3_29 {
  public partial class Form1 : Form {
 
    double[] nx, ny;
    const int NP = 100;
    Random r = new Random();
    const int WH = 200;
    private int cshft, pshft;
    Color[] col,colors;
    Panel[] panels;
    PointF[] points;
    PointF[] pnts;
    int np,pn,cn;
 
 
    void GenPoints() {
      for (int i = 0; i < NP; i++) {
        nx[i] = r.NextDouble() * WH;
        ny[i] = r.NextDouble() * WH;
      }
      for (int i = 0; i < NP; i++) pshft = r.Next(NP);
    }
 
    public Form1() {
      InitializeComponent();
      nx = new double[NP]; ny = new double[NP]; points = new PointF[21]; colors = new Color[7];
      col = new Color[] { Color.Red, Color.Orange, Color.Yellow, Color.Green, Color.Blue, Color.BlueViolet, Color.LemonChiffon, Color.Lime, Color.Magenta, Color.Brown };
      GenPoints();
      cshft = r.Next(10);
      panels = new Panel[7];
      panels[0] = panel1; panels[1] = panel2; panels[2] = panel3; panels[3] = panel4; panels[4] = panel5; panels[5] = panel6; panels[6] = panel7;
      Init();
    }
 
    private void panels_Paint(object sender, PaintEventArgs e) {
      pnts = new PointF[3];
      Graphics g = e.Graphics;
      Pen p = new Pen(col[np], 2);
      Brush b = new SolidBrush(col[np]);
      pnts[0] = new Point(100, 56);
      pnts[1] = new Point(45, 123);
      pnts[2] = new Point(12, 40);
      g.DrawPolygon(p, pnts);
      g.FillPolygon(b, pnts);
      Invalidate();
    }
 
    private void Init() {
      pn = pshft;
      for (int i = 0; i < 21; i++) {
        pn %= NP;
        points[i] = new PointF((float)nx[pn], (float)ny[pn]);
        pn++;
      }
      
      cn = cshft;
      for (int i = 0; i < 7; i++) {
        cn %= 10;
        colors[i] = col[cn];
        cn++;
      }
      for (np = 0; np < 7; np++) {
        panels[np].Paint += new PaintEventHandler(panels_Paint);
      }
    }
 
    private void bColor_Click(object sender, EventArgs e) {
      cshft = r.Next(10);
      Init();
    }
 
    private void bPlace_Click(object sender, EventArgs e) {
      pshft = r.Next(NP);
      Init();
    }
 
  }
}

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


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

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

8   голосов , оценка 4.125 из 5
Похожие ответы