Rysowanie eirlokontów foremnych na formie w C#

0

Witam tak jak w temacie na formie w C# ma być pole z którego pobierana jest liczba i dwa przyciski rysuj i czyść. po wpisaniu np. 6 w pole ma się wyrysować sześciokąt foremny. Niestety nie mam pojęcia jak rysować na formie wiem że jest opis ale nie kumam jak to działa. oprócz tego że ma się narysować figura to mają się narysować wszystkie jej przekątne. Pomożecie?

0

Masz problem z utworzeniem bitmapy i rysowaniem po niej za pomocą klas z frameworka, czy z obliczeniem współrzędnych wierzchołków?

0

na obliczenie jest algorytm ale nie moge zaczaić jak spowodować bym mógł rysować po formie

0

Wrzucasz na formę jakiś panel/cokolwiek, podpinasz się pod jego zdarzenie Paint, i rysujesz pięknie:

private void panel1_Paint(object sender, PaintEventArgs e) {
    Graphics g = e.Graphics;

    g.DrawLine(Pens.Black, new Point(10, 10), new Point(50, 50));
    g.DrawRectangle(Pens.Green, 20, 20, 60, 60);
    g.FillEllipse(Brushes.LightPink, 30, 30, 20, 20);
}
2

Może coś takiego:

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Graphics graph = CreateGraphics();
            Pen penCurrent = new Pen(Color.Red);
            int i;
            float angle;
            int SIDES_COUNT;
            int RADIUS = 200;
            SIDES_COUNT = int.Parse(textBox1.Text);
            float xp;
            float xk;
            float yp;
            float yk;
            xp = 150 + RADIUS + (float)(Math.Cos(0) * RADIUS);
            yp = 100 + RADIUS + (float)(Math.Sin(0) * RADIUS);

            for (i = 1; i <= SIDES_COUNT; i++)
            {
                angle = (float)(Math.PI * 2 * ((float)i / SIDES_COUNT));

                xk = 150 + RADIUS + (float)(Math.Cos(angle) * RADIUS);
                yk = 100 + RADIUS + (float)(Math.Sin(angle) * RADIUS);

                graph.DrawLine(penCurrent, xp, yp, xk, yk);

                xp = xk;
                yp = yk;
                MessageBox.Show(i.ToString());
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {

        }
    }
}

Co do przekątnych nie kombinowałem jak by je napisać bo nie mam zbytnio czasu

1

Najprosciej chyba bedzie (majac juz liste punktow z tego zewnetrznego algorytmu, o ktorym pisales) przeleciec w petli po tych punktach i rysowac linie na zasadzie "kazdy z kazdym", uzywajac metody przedstawionej przez @MSM:

g.DrawLine(Pens.Black, firstPoint, secondPoint);
0

Panowie a co wpisać pod przyciskiem czyszczącym bo

graph.clear(); 

nie działa jak się to czyści?

2

Sposób nieco bezczelny ale działa :)

this.WindowState = FormWindowState.Minimized;
            this.WindowState = FormWindowState.Maximized; 
2

Sprytny sposób, myślałbym tydzień i bym na to nie wpadł :P.
Mimo wszystko nie polecam.

Powinno zadziałać

this.Invalidate()

albo po prostu

graph.Clear(Color.cokolwiek);

Polecam na przyszlośc przeglądnąć listę metod graphics (bo skąd clear wziąłeś nie jestem pewny):
http://msdn.microsoft.com/en-[...]cs_methods%28v=vs.110%29.aspx

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0