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

Вход на сайт

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

Построения
на плоскости (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 Яндекс.Метрика
Скриншот к примеру
Среда программирования: 
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 кб