Уроки, алгоритмы, программы, примеры

Вход на сайт

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

dobryj den, popytalas otkryt prikreplionnyj fail ctoby posmotret kak rabotaet, no mne ego ne pokazyvaet vydajet osibku. Pochemu?
Очень интересно! ии сайт крутой жалко что умирает(
У Вас число превысит максимальное число int. Можно использовать в Вашем случае uint, но лучше все переписать на double.
Добавление к программе строки glutReshapeFunc(changeSize); приводит к тому, что треугольник перестаёт совсем отрисовываться.
Выдаёт ошибку glut32.dll не найден! При том, что он лежит в System32! Всё решил) Нужно отправить не в System32, а в System.

Счетчики и рейтинг

Рейтинг@Mail.ru Яндекс.Метрика
Язык программирования: 
C#
Среда программирования: 
Visual Studio 2013

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 Circle_lines
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Start(); //запускаем таймер
            timer1.Interval = 80; //Timer объект запускает Timer.Elapsed событий каждые 0.08 секунды (80 миллисекунд) 
        }
 
        int cycle = 0;// переменная для хранения текущего состояния прорисовки
        double delta = 6.28 / 20;// Переменная, задающая количество линий в одном круге
        double deltaDist = 15; // Переменная, задающая расстояние между кругами
        double mom = 0.01;// Переменная, хранящая момент анимации
 
 
       // Функция, рисующая анимируемое изображение
       void draw(int c, double moment, Graphics g2)
       {
           //Создаём экземпляр класса BufferedGraphics, вызвав метод Allocate
           BufferedGraphicsContext currentContext; 
           BufferedGraphics myBuffer;
           currentContext = BufferedGraphicsManager.Current;
           myBuffer = currentContext.Allocate(this.pictureBox1.CreateGraphics(), this.pictureBox1.DisplayRectangle);
           Pen pen = new Pen(Color.White,2);//создаём новое перо указывая его цвет и толщину
	        for(double distance=deltaDist,step=1;distance<200;distance+=deltaDist)
            {
                    for(double d=0 ;d<6.28;d+=delta)
                    {	// Для удобства обращения создаётся массив точек, вокруг текущей (той, что будет рисоваться)
                        Point[] p ={
		                 new Point((int)(distance*Math.Cos(d)),(int)( distance*Math.Sin(d))),
		                 new Point((int)(distance*Math.Cos(d+step*delta)),(int)( distance*Math.Sin(d+step*delta))),
		                 new Point((int)((distance+deltaDist)*Math.Cos(d+step*delta)),(int)( (distance+deltaDist)*Math.Sin(d+step*delta))),
		                 new Point((int)((distance+deltaDist)*Math.Cos(d)),(int)( (distance+deltaDist)*Math.Sin(d))),
		                 new Point((int)((distance+deltaDist)*Math.Cos(d-step*delta)),(int)( (distance+deltaDist)*Math.Sin(d-step*delta))),
		                 new Point((int)(distance*Math.Cos(d-step*delta)),(int)(distance*Math.Sin(d-step*delta))),
		                  };
                        // Вычисление второй координаты, в зависимости от момента анимации
                        int X = (int)(p[c + 1].X + (-p[c + 1].X + p[c + 2].X) * mom), Y = (int)(p[c + 1].Y + (-p[c + 1].Y + p[c + 2].Y) * mom);
                        // Рисование линии по уже вычисленным ранее координатам с внесением в буфер графическиого объекта и с переносом центра координат в центр окна
                        myBuffer.Graphics.DrawLine(pen, p[0].X + 300, p[0].Y + 270, X + 300, Y + 270);
                    } 
	      step*=-1;
            }
            myBuffer.Render(this.pictureBox1.CreateGraphics());//отрисовка содержимого буфера
    }
       private void timer1_Tick(object sender, EventArgs e)
       {
           Graphics gr = pictureBox1.CreateGraphics(); //Создаём объект Graphics для pictureBox1
           draw(cycle, mom, gr);// Вызываем функцию рисования
           if (mom < 1) mom += 0.2;// Приращение момента анимации
           else
           {
               mom = 0.01;
               cycle += 1;
               cycle %= 4;
           }		 
       }
 
 
    }
}

Прикрепленный файлРазмер
Al-Andari_Circle_lines.zip54.7 кб