Создание поверхности сдвига сплайн функции Безье. Вай - C#

Узнай цену своей работы

Формулировка задачи:

Ух ребята. Контрольная работа тут у меня. Но не стоит паниковать. Я тут уже чего спрограммулил.. В общем я тоже долго курил что от меня требует. На сколько я понял нужно построить кривую, на шаге допстим в 300 (относительно z) построить точно такую же кривую, и соеденить полигонами так, чтоб всё это вышло в кривоватую поверхность. Когда я выкурил уже третий бамбук и дело пошло до акации на подоконнике, я подумал что проще будет сделать похожий вариант соседа, то есть построить не кривую Безье, а криую синуса.. Ну хоть формулы знакомые будут. (яндекс картинками не блещет, вот подобные) http://lib.znate.ru/pars_docs/refs/52/51896/51896_html_769b2327.png http://2.bp.blogspot.com/-X_Ds7swG6o...36.34%2BAM.png Короче в итоге должно получиться что-то в духе шифера/зановесок/флага на ветру... Использовать ваши новомодные opengl/unity/etc нельзя. По хардкору всё. Типа чтобы знали как ведьмаки создавать с нуля... видимо. Получилось у меня пока только что отображается 4 кривые и нефига не понятно они часть одной плоскости или 4 разные плоскости о_О Используется метод художника, может полигоны перекрывыают друг друга и не отрисовываются код http://pastebin.com/Qut5qC3J СЛоН (*.sln) https://www.dropbox.com/s/jxb6gb91mj3dk7f/3d-test3.7z?dl=0 Код напичкам мусорными комментариями, так как я всё же надеялся что Безье мне под силу.. Но препод похлопал меня по плечу и сказал "да тут фигня ваще, тут работы то на 15 минут". На данный момент я отправился в горы познавать Дзинь как мой "учитель". Он то ведь за 15 минут такое решит.. Прошу вашей помощи допилить или пнуть в направлении верного решения. ЗЫ: И да, код нефига не оптимизирован.. я всё ручками писал. Делать цикл в цикле в цикле не мой конёк

Решение задачи: «Создание поверхности сдвига сплайн функции Безье. Вай»

textual
Листинг программы
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
using System.Linq;
 
namespace WindowsFormsApplication268
{
    public partial class Form1 : Form
    {
        private PointF[] points;
 
        public Form1()
        {
            InitializeComponent();
 
            SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.UserPaint, true);
 
            //строим кривую Безье
            var path = new GraphicsPath();
            var s = "0,50;50,110;100,40;150,90";
            points = s.Split(';').Select(p => new PointF(int.Parse(p.Split(',')[0]), int.Parse(p.Split(',')[1]))).ToArray();
            path.AddBeziers(points);
            //получаем точки
            path.Flatten();
            points = path.PathPoints;
        }
 
        protected override void OnPaint(PaintEventArgs e)
        {
            //шкалирование
            e.Graphics.ScaleTransform(3, 3);
            //перспектива
            var dx = 5;
            var dy = -3;
            //рисуем полигоны
            for (int z = 0; z < 10; z++ )
            for (int i = 0; i < points.Length - 1; i++)
            {
                var p1 = new PointF(points[i].X + z * dx, points[i].Y + z * dy);
                var p2 = p1 + new Size(dx, dy);
                var p4 = new PointF(points[i + 1].X + z * dx, points[i + 1].Y + z * dy);
                var p3 = p4 + new Size(dx, dy);
                var pp = new PointF[] {p1, p2, p3, p4};
                e.Graphics.FillPolygon(Brushes.Silver, pp);
                e.Graphics.DrawPolygon(Pens.Black, pp);
            }
            
            base.OnPaint(e);
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.5 из 5
Похожие ответы