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

Вход на сайт

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

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

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

КРУГОВОЙ ФРАКТАЛ -ОШИБОЧНАЯ ПРОГРАММА! ПАПА ЗибЕрт
Можешь обяснить подробно что как работает, и почему массу не задаем
Здравствуйте, Ильгиз. Математика - царица наук (Карл Гаусс). Изучение математики начинается с детского сада, когда нас учат считать и выполнять простые арифметические операции. Любой, даже самый простейший алгоритм будет связан с арифметическими...
Я хотел узнать математика это обязательно в программирование. Пять лет назад просто из любопытства я увлекся HTML потом изучил CSS и JvaScript потом изучил PHP и Java. Как то не задумывался и начал смотреть форумы и узнал что без математики не...
Все верно, но так же необходимо зайти в: Компоновщик -> Ввод -> Дополнительные зависимости Здесь необходимо нажать изменить и в Дополнительные зависимости прописать это: SDL2.lib SDL2main.lib SDL2test.lib Без этого не заработает. (MVS 2015)

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

Яндекс.Метрика Рейтинг@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 кб