Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > WPF, UWP, WinRT, XAML
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2011, 20:18   #1
LENA_M
Пользователь
 
Регистрация: 24.04.2009
Сообщений: 98
По умолчанию Изолинии в OpenGL

Здравствуйте!!!
Я делаю проект по изолиниям, осталось самое важное: добавить в свой проект кусочек кода по построению изолиний. Я новичок в C# и тем более в OpenGL. Знаю как написать алгоритм на паскале но не знаю как перевести его на C#.
Нашла возможное решение, код простой, но я не совсем ясно понимаю, что он строит изолинии по заданной функции или всё таки подсчитывает их число? Пожалуйста посмотрите, уверена , что для людей, работающих с OpenGL это не сложно...
Код:
internal class GraphicsImageGenerator
    {
        public GraphicsImageGenerator()
        {
            const double minXY = 0;
            const double maxXY = Math.PI * 2;
            const double e = 0.01;
            double intervalXY = maxXY - minXY;
            Bitmap = new Bitmap(400, 400);
            double[] levels = { -1, -0.75, -0.5, -0.25, 0, 0.25, 0.5, 0.75, 1 };
            for (int i = 0; i < Bitmap.Width; i++)
            {
                for (int j = 0; j < Bitmap.Height; j++)
                {
                    for (int k = 0; k < levels.Length; k++)
                    {
                        double x = minXY + intervalXY * i / Bitmap.Width;
                        double y = minXY + intervalXY * j / Bitmap.Height;
                        double zn = Z(x, y);
                        if (zn >= levels[k] - e && zn <= levels[k] + e)
                        {
                            var c = (int)(255 * Math.Abs(zn - levels[k]) / e);
                            Bitmap.SetPixel(i, Bitmap.Height - j - 1, Color.FromArgb(c, c, c));
                        }
                    }
                }
            }
        }
        public Bitmap Bitmap { get; private set; }
        private static double Z(double x, double y)
        {
            return Math.Sin(x) * Math.Cos(y);
        }
    }
}
Вот сам проект, в форме contours и нужно вставить кусочек кода...
Вложения
Тип файла: rar blabla.rar (33.0 Кб, 17 просмотров)
LENA_M вне форума Ответить с цитированием
Старый 26.05.2011, 01:24   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а где вы там OpenGL то нашли?
dotNET то его не поддерживает по умолчанию, только если за счет сторонних либ.
в коде рисуется на Bitmap, а его уже куда хотите.

судя по коду там всетаки рисуется.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 26.05.2011, 15:05   #3
LENA_M
Пользователь
 
Регистрация: 24.04.2009
Сообщений: 98
По умолчанию

Класс то написан на си шарп а вот проект я пишу с использованием OpenGL.
Я сделала форму, написала в ней алгоритм который привела выше, но я не знаю как визуализовать с помощью OpenGL то, что я написала, эти самые точки и график для них. Может кто то подскажет?
Вот код формы :
Код:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using Raster;


namespace _025contours
{
  public partial class Form1 : Form
  {
    /// <summary>
    /// Initialize the function-selection combo-box.
    /// </summary>
    protected void InitializeFunctions()
    {
      functions = new List<Func<double, double, double>>();

      // 0:
      functions.Add( ( double x, double y ) => Math.Sin( 0.1 * x ) + Math.Cos( 0.1 * y ) );
      comboFunction.Items.Add( "Waves 0" );
      // 1:
      functions.Add( ( double x, double y ) =>
      {
        double r = 0.1 * Math.Sqrt( x * x + y * y );
        return (r <= Double.Epsilon) ? 10.0 : (10.0 * Math.Sin( r ) / r);
      } );
      comboFunction.Items.Add( "Drop 0" );

      comboFunction.SelectedIndex = 0;
      f = functions[ 0 ];

      // threshold set
      for ( double d = -10.0; d <= 10.0; d += 0.2 )
        thr.Add( d );
    }

    /// <summary>
    /// Draw contour field to the given Bitmap
    /// using class members: origin, scale, valueDrift, thr
    /// </summary>
    protected void ComputeContours ( Bitmap image )
   {
      if ( f == null ) return;
      
        
       //siuda napisi svoi kontury, narisovat  !!!!
      // !!!{{ TODO: write your own contours drawing code here

     // int width  = image.Width;
      // int height = image.Height;

      //for ( int y = 0; y < height; y++ )
     // {
      //  double dy = (y - origin.Y) * scale;
       // for ( int x = 0; x < width; x++ )
       // {
        //  double dx = (x - origin.X) * scale;
       //   double val = f( dx, dy ) + valueDrift;
        // image.SetPixel( x, y, Draw.ColorRamp( val * 0.1 + 0.5 ) );
        //}
          //}

      const double minXY = 0;
      const double maxXY = Math.PI * 2;
      const double e = 0.01;
      double intervalXY = maxXY - minXY;
      Bitmap = new Bitmap(400, 400);
      double[] levels = { -1, -0.75, -0.5, -0.25, 0, 0.25, 0.5, 0.75, 1 };
      for (int i = 0; i < image.Width; i++)
      {
          for (int j = 0; j < image.Height; j++)
          {
              for (int k = 0; k < levels.Length; k++)
              {
                  double x = minXY + intervalXY * i / image.Width;
                  double y = minXY + intervalXY * j / image.Height;
                  double zn = Z(x, y);
                  if (zn >= levels[k] - e && zn <= levels[k] + e)
                  {
                      var c = (int)(255 * Math.Abs(zn - levels[k]) / e);
                      image.SetPixel(i, image.Height - j - 1, Color.FromArgb(c, c, c));
                  }
              }
          }
      }
    }
    public Bitmap Bitmap { get; private set; }
    private static double Z(double x, double y)
    {
        return Math.Sin(0.1 * x) + Math.Cos(0.1 * y);
        // !!!}}
    }
  
 //     partial class Form1 {

//protected override void OnPaint(PaintEventArgs e) {
   //Bitmap bitmap = new ComputeContours().Bitmap;
  // e.Graphics.DrawImage(bitmap, 10, 10);
//}

//}


    private void InitializeComponent()
    {
        this.SuspendLayout();
        // 
        // Form1
        // 
        this.ClientSize = new System.Drawing.Size(621, 325);
        this.Name = "Form1";
        this.Load += new System.EventHandler(this.Form1_Load);
        this.ResumeLayout(false);

    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }
  }
}
Спасибо!
LENA_M вне форума Ответить с цитированием
Старый 26.05.2011, 15:52   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

у вас какая библиотека OpenGL то установлена к вашему проекты?
CsGL? или что?
что вам мешает просто нарисовать ваш битмап на форме?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 26.05.2011, 18:56   #5
LENA_M
Пользователь
 
Регистрация: 24.04.2009
Сообщений: 98
По умолчанию

да, вроде эта библиотека...(GL)
у меня задание такое:сделать так и так, и именно в contour.cs вставить эту функцию, если было бы проще я бы попыталась сделать по другому...
LENA_M вне форума Ответить с цитированием
Старый 28.05.2011, 14:59   #6
LENA_M
Пользователь
 
Регистрация: 24.04.2009
Сообщений: 98
По умолчанию

Вообще этот класс GraphicsImageGenerator он рабочий, т.е я не могу проверить его работоспособность, он реальный или он изначально сделан неверно?
LENA_M вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OpenGL в Qt papos Qt и кроссплатформенное программирование С/С++ 2 13.11.2010 23:16
OpenGL GBAXA Общие вопросы Delphi 2 30.07.2010 20:39
OpenGL bigory Общие вопросы C/C++ 8 24.06.2010 14:26
OpenGl macintoshka12 Общие вопросы C/C++ 2 21.04.2010 12:59
Изолинии... Roof Общие вопросы Delphi 4 18.09.2007 16:15