Создание поверхности сдвига сплайн функции Безье. Вай - 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
Листинг программы
  1. using System;
  2. using System.Drawing;
  3. using System.Drawing.Drawing2D;
  4. using System.Windows.Forms;
  5. using System.Linq;
  6.  
  7. namespace WindowsFormsApplication268
  8. {
  9.     public partial class Form1 : Form
  10.     {
  11.         private PointF[] points;
  12.  
  13.         public Form1()
  14.         {
  15.             InitializeComponent();
  16.  
  17.             SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.UserPaint, true);
  18.  
  19.             //строим кривую Безье
  20.             var path = new GraphicsPath();
  21.             var s = "0,50;50,110;100,40;150,90";
  22.             points = s.Split(';').Select(p => new PointF(int.Parse(p.Split(',')[0]), int.Parse(p.Split(',')[1]))).ToArray();
  23.             path.AddBeziers(points);
  24.             //получаем точки
  25.             path.Flatten();
  26.             points = path.PathPoints;
  27.         }
  28.  
  29.         protected override void OnPaint(PaintEventArgs e)
  30.         {
  31.             //шкалирование
  32.             e.Graphics.ScaleTransform(3, 3);
  33.             //перспектива
  34.             var dx = 5;
  35.             var dy = -3;
  36.             //рисуем полигоны
  37.             for (int z = 0; z < 10; z++ )
  38.             for (int i = 0; i < points.Length - 1; i++)
  39.             {
  40.                 var p1 = new PointF(points[i].X + z * dx, points[i].Y + z * dy);
  41.                 var p2 = p1 + new Size(dx, dy);
  42.                 var p4 = new PointF(points[i + 1].X + z * dx, points[i + 1].Y + z * dy);
  43.                 var p3 = p4 + new Size(dx, dy);
  44.                 var pp = new PointF[] {p1, p2, p3, p4};
  45.                 e.Graphics.FillPolygon(Brushes.Silver, pp);
  46.                 e.Graphics.DrawPolygon(Pens.Black, pp);
  47.             }
  48.            
  49.             base.OnPaint(e);
  50.         }
  51.     }
  52. }

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


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

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

6   голосов , оценка 4.5 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы