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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2010, 16:24   #1
HURRICANE
 
Регистрация: 13.04.2010
Сообщений: 7
Вопрос По изолиниям постоить 3D поверхность (интерполяция) (C#)

Здравствуйте!
Стоит такая задача: по изолиниям построить 3D поверхность.

Изолинии (линии с одинаковой высотой) рисую при помощи мышки и записываю данные в 2-мерный массив (карту высот). Но для построения поверхности мало данных.

Как интерполировать данных в пустых ячейках? Чтоб были заполнены все ячейки.

Вот мой код:
Код:
        bool mDouble = false;
        private void glControl2_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            if (HeightMap != null)
            {
                timer1.Stop();
                mDouble = true;
                g.Clear(Color.White);

                for (int y = 0; y < (int)Math.Sqrt(HeightMap.Length); y++)
                    for (int x = 0; x < (int)Math.Sqrt(HeightMap.Length); x++)
                        HeightMap[x, y] = 0;
            }
        }

        private void glControl2_MouseDown(object sender, MouseEventArgs e)
        {
                mousePress2 = true;
                CurrentMousePoz = e.Location;
                HeightMap[Convert.ToInt32(CurrentMousePoz.X * kx), Convert.ToInt32(CurrentMousePoz.Y * ky)] = Convert.ToByte(comboBox1.Text);
        }

        private void glControl2_MouseUp(object sender, MouseEventArgs e)
        {
            mousePress2 = false;
        }

        private void glControl2_MouseMove(object sender, MouseEventArgs e)
        {
            if (mousePress2 && mDouble)
            {
                g.DrawLine(new Pen(Color.Blue),CurrentMousePoz.X, CurrentMousePoz.Y, e.Location.X, e.Location.Y);
                CurrentMousePoz = e.Location;

                HeightMap[Convert.ToInt32(CurrentMousePoz.X * kx), Convert.ToInt32(CurrentMousePoz.Y * ky)] = Convert.ToByte(comboBox1.Text);
            }
        }
Для примера вот картинка, где цифры - это извесные высоты на карте:
HeightMap.png
HURRICANE вне форума Ответить с цитированием
Старый 01.06.2010, 03:42   #2
HURRICANE
 
Регистрация: 13.04.2010
Сообщений: 7
По умолчанию

Up
Помогите пожалуйста!
HURRICANE вне форума Ответить с цитированием
Старый 01.06.2010, 09:02   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

1. нарисовать на бумаге профиль высот.
2. лтметить известные точки (изолинии)
3. отметить желаемые точки (изолинии)
4. соединить их линиями
5. посмотреть на рисунок
6. вспомнить школьную геометрию (прямоуглдьный треугольник и подобие)
7. ПОДУМАТЬ
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 01.06.2010, 20:51   #4
HURRICANE
 
Регистрация: 13.04.2010
Сообщений: 7
По умолчанию

Сколько думаю, думаю всё равно не получается это реализовать.

Может кто-то уже сталкивался с такой задачей?!
HURRICANE вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
По изолиниям постоить 3D поверхность (интерполяция) HURRICANE Общие вопросы .NET 0 31.05.2010 16:07
Интерполяция изображений(Сплайн интерполяция)?????) Danyla Помощь студентам 0 13.04.2010 09:08
Построить поверхность гиперболического параболоида. Cody M. Microsoft Office Excel 5 12.05.2009 09:34
Постоить график функций: Паскаль Deis Помощь студентам 5 19.01.2009 09:41
Поверхность по массиву точек на OpenGL в Delphi Mixasik Помощь студентам 1 21.07.2008 16:41