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

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

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

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

У меня проблема вот с этим: gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);. Вылезает ошибка: CS1061 "object" не содержит определения "GL_COLOR_BUFFER_BIT", и не удалось найти доступный метод расширения "GL_COLOR_BUFFER_BIT",...
Большое спасибо. Единственный код который прошел без каких либо ошибок. Ура!!!
Скажите пожалуйста, подскажите алгоритм по которому по заданным точкам можно определить тип многогранника, скажем это куб или прямоугольный параллелепипед. Нашел теорию по этим фигурам: https://www.mat... https://www.mat... Акцентировать внимание...
Всем у кого не работает. файл wizard.script Ещё одно упоминание Glut32 в строке "if (!VerifyLibFile(dir_nomacro_lib, _T("glut32"), _T("GLUT's"))) return false;" меняем на "if (!VerifyLibFile(dir_nomacro_lib, _T("freeglut"), _T("GLUT's"))) return...
Не получается, емаё

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

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

Построение вложенных спиральных квадратов. Аналогично примеру на Pascal, на форме находится кнопка, по нажатию на которую, сначала рассчитываются координаты, начиная с правой нижней точки, двигаясь по часовой стрелке, заканчивая верхней правой точкой. Координаты первой точки рассчитываются по формуле:
x = (int)(x0 + c * Math.Cos(b + 1 * Math.PI / 4));
y = (int)(y0 + c * Math.Sin(b + 1 * Math.PI / 4))

Координаты трёх следующих точек рассчитываются по этой же формуле, только при расчете каждой следующей координаты мы прибавляем и умножаем 2 ко второму слагаемому в скобке. Т.е. вторая точка будет иметь координаты:
x = (int)(x0 + c * Math.Cos(b + 3 * Math.PI / 4));
y = (int)(y0 + c * Math.Sin(b + 3 * Math.PI / 4));

И так далее, вплоть до 4 точки.
Переменная "c" рассчитывается по формуле:c=x*Math.Sin(Math.PI/3), для каждого следующего квадрата эта переменная получается путем умножения ее предыдущего значения на Math.Sin(Math.PI/3). Переменная х была найдена экспериментальным путем.
Переменная "b" рассчитывается по формуле: b =b + Math.PI/19, для каждого следующего квадрата эта переменная получается путем сложения ее предыдущего значения с Math.PI/19.

Код программы: 

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
    {
        int i; //Переменная используемая в цикле, обозначает кол-во проходов
        double l, a; //Переменные используемые для построения каждого квадрата
        const
 
              int d0 = 283, //Константа, влияющая на расстояние от
                                //центра квадрата до углов(Не диагональ),
                                //подобрана экспериментальным путем*/
                 x0 = 200,  //Координаты центра квадрата
                 y0 = 200;
        public Form1()
        {
            InitializeComponent();//Обязательный метод для поддержки конструктора
        }
        void DrawSquare(double c, double b) //функция построения и отрисовки квадрата
        {
            int x1, x2, x3, x4, y1, y2, y3, y4; //Координаты углов каждого квадрата
            Pen myPen = new Pen(Color.Black, 1); //Выбираем перо "myPen" черного цвета Black
                                                    //толщиной в 1 пиксель
            Graphics g = pictureBox1.CreateGraphics();//Объявляем объект "g" класса Graphics и 
            //предоставляем ему возможность рисования на pictureBox1:
            x1 = (int)(x0 + c * Math.Cos(b + 1 * Math.PI / 4));//Координаты правой нижней
            y1 = (int)(y0 + c * Math.Sin(b + 1 * Math.PI / 4));//точки
            x2 = (int)(x0 + c * Math.Cos(b + 3 * Math.PI / 4)); //Координаты левой нижней 
            y2 = (int)(y0 + c * Math.Sin(b + 3 * Math.PI / 4)); //точки
            x3 = (int)(x0 + c * Math.Cos(b + 5 * Math.PI / 4)); //Координаты левой верхней
            y3 = (int)(y0 + c * Math.Sin(b + 5 * Math.PI / 4)); //точки 
            x4 = (int)(x0 + c * Math.Cos(b + 7 * Math.PI / 4));//Координаты правой верхней
            y4 = (int)(y0 + c * Math.Sin(b + 7 * Math.PI / 4)); //точки
            //Метод строящий фигуру по 4 точкам
            g.DrawPolygon(myPen, new Point[] {
                new Point(x1,y1),new Point(x2,y2),
                new Point(x3,y3),new Point(x4,y4),
            });
 
 
        }
        //Функция  построения квадратов  с заданными параметрами по нажатию кнопки 
        private void button1_MouseClick(object sender, MouseEventArgs e)
        {
            l = d0;
	        a = 0;
            for (i = 1; i <= 30; i++)//Цикл, рисующий 30 квадратов
            {
                DrawSquare(l, a); //Вызов функции построения и отрисовки квадрата
                a =a + Math.PI/19;//изменяет угол поворота следующих квадратов
                l=l*Math.Sin(Math.PI/3);//изменяет размер следующих квадратов
 
            }   
     }
 
 
    }
}

Прикрепленный файлРазмер
Spir_Kvadrat_C#.zip47.35 кб