Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите начертить эквипотенциальные поверхности, Срочно! Нужна информация 
:(
    Опции темы
ElPuzo
Дата 24.12.2008, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.12.2008

Репутация: нет
Всего: нет



Доброго времени суток!

Срочно нужна помощь. Сейчас занимаюсь дипломом задача: программа расчета электромагнитных полей методом сеток.
выходные данные: двумерный массив значений функции в узловых точках сетки.

Сам расчет я провел с этим проблем не возникло, но вот проблемы начались когда попросили дописать программу, таким образом, чтобы еще и строились эквипотенциальные поверхности, т.е. кривые проходящие через точки поверхности имеющие одинаковый потенциал. 

1. Основная сложность, в том что поверхность расчитываемая мною дискретна и на ней нет расчетных точек с одинаковыми потенциалами. Соответственно эквипотенциальные поверхности должны проходить не через узловые точки, а через каким -то образом апроксимированные или интерполированные. помимо этого количество расчетных точек может колебатся от 12 до 1800, а эквипотенциальных поверхностей должно быть не более 10.

2. К тому же я никогда не работал с графикой в среде дельфи.

Прошу помочь с выбором и поиском алгоритмов для первой части и литературы для второй. 
Если когда либо кому-нибудь попадался код с подобной задачей, прошу показать.

Буду рад любой помощи.
PM MAIL   Вверх
Alexeis
Дата 24.12.2008, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Можно поступить хитро, применить графику в помощь физике. Для растяжения картинок часто используют билинейную интерполяцию. Суть ее в том что интерполируется яркость с промежуточных точках. Пусть есть 4 точки

1    2 

3    4

В каждой из точек нам известна яркость. Яркость будет у нас значением функции которую нужно интерполировать на плоскости. 
Сначала делается линейная интерполяция для всех точек расположенных между опорными точками 1 и 3 (т.е. по вертикали). Делается это просто, через 2е точки всегда можно построить прямую по известному уравнению.  Теперь для любой точки между 1 и 3 можно вычислить яркость подставив координату У в уравнение прямой. Аналогично действуем с точками 2 и 4. В итоге мы получили интерполяцию по оси У, дальше делаем аналогичным способом для оси Х. Берем точки 1 и 2 и интерполируем все точки между ними, после чего мы можем спустить на ряд пикселей (не ряд опорных точек) ниже, ведь яркость точек на линиях 1 3 и 2 4 нам известна, значит для каждой строки пикселей мы можем теперь сделать свою интерполяцию по яркости.

  Теперь переходим к физике, вместо яркости у нас другая величина электрический потенциал. Как он меняется в промежуточных точках мы не знаем, потому производим почти такую же билинейную интерполяцию. Почти заключается в том что нам нужны эквипотенциальные линии. Поскольку при билинейной интерполяции у нас появляется множество промежуточных значений, то те значения которые будут ближе всего к нужному потенциалу мы нарисуем цветом отличным от фона, например красным. Признак таков 

if abs(P(x, y) - P[n]) < err 
then 
  Pixels[x, y] := clRed;

P(x, y) - это будет потенциал в точке соответствующей пикселю, P[n] - массив значений потенциалов для которых нужно рисовать эквипотенциальные линии, err - погрешность, которую прийдеться подобрать руками, от нее будет зависить толщина линий. Чем она больше тем толще будет эквипотенциальная линия. Если она будет слишком маленькой то эквипотенциальная линия будет местами иметь разрывы (где не найдется точки достаточно близкой к нужному потенциалу)

Рисовать проще всего на канве (Canvas) используя свойство Pixels присваивая яркости. Это медленно, зато просто.

По поводу реализации Билинейной интерполяции можно заглянуть в ФАК, DRKB, или просто погуглить, реализаций есть сотни. Останется только переделать под свою задачу.
  Более красивые результаты получаться при бикубической интерполяции, там яркость (потенциал) интерполируется по 4м точкам (строиться кубический сплайн). Т.о. При интерполяции одного квадратного фрагмента плоскости участвуют 16 точек и апроксимирующая функция становиться более гладкой (более длинные участки с непрерывной производной).


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ElPuzo
Дата 24.12.2008, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.12.2008

Репутация: нет
Всего: нет



Спсасибо большое. По поводу билинейной интереполяции все понял практически. Единчтвенное P[x,y] - это массив со значениями потенциалов во всех точках, по числу пикселей? то,есть он не маленький получается

А вот как насчет бикубической? Чего то совсем не понятно как с 16 точками быть? как линии проводить?

вероятно для моих целей подойдет и билинейная попробую пока реализовать

PM MAIL   Вверх
Alexeis
Дата 24.12.2008, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Цитата(ElPuzo @  24.12.2008,  13:06 Найти цитируемый пост)
псасибо большое. По поводу билинейной интереполяции все понял практически. Единчтвенное P[x,y] - это массив со значениями потенциалов во всех точках, по числу пикселей? то,есть он не маленький получается

      Ну не такой уж и большой, пару мегабайт. Кроме того его можно и не создавать. В том месте где идет расчет интерполяции потенциала там же и проверять значение потенциала, если он близок к нужному то рисовать цветом линии иначе рисовать белым. Код я привел для примера. Кстати можно еще улучишь картинку меняя яркость цвета линии в зависимости от погрешности, тогда получаться сглаженные линии smile .

Добавлено через 14 минут и 41 секунду
  Бикубик это фактически построение полинома 3й степени
см. http://ru.wikipedia.org/wiki/%D0%9A%D1%83%...%B0%D0%B9%D0%BD


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ElPuzo
Дата 24.12.2008, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.12.2008

Репутация: нет
Всего: нет



Здорово спасибо, а погрешность наверно лучше относительную считать тогда, линия будет без пробелов, ведь значения потенциала могут сильно менятся около одних точек и почти оставаться не изменными у других.

Когда реализую програмнно отпишусь как получилось, если это кому то интересно конечно.
PM MAIL   Вверх
Alexeis
Дата 24.12.2008, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Цитата(ElPuzo @  24.12.2008,  14:44 Найти цитируемый пост)
Здорово спасибо, а погрешность наверно лучше относительную считать тогда, линия будет без пробелов, ведь значения потенциала могут сильно менятся около одних точек и почти оставаться не изменными у других.

  Да, точно, так еще лучше.

Цитата(ElPuzo @  24.12.2008,  14:44 Найти цитируемый пост)
Когда реализую програмнно отпишусь как получилось, если это кому то интересно конечно. 

  Конечно интересно, особенно на скрины посмотреть  smile 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ElPuzo
Дата 26.12.2008, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.12.2008

Репутация: нет
Всего: нет



Блин толи где-то в коде напутал, толи расчет неверный получился. В общем кривые получаются через чур "кривыми". Может быть проблема в расчетах?

user posted image

Это сообщение отредактировал(а) Alexeis - 26.12.2008, 20:18
PM MAIL   Вверх
Alexeis
Дата 26.12.2008, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



ElPuzo, хорошо бы еще опорные точки отрисовать, тогда было бы понятнее.

Добавлено через 1 минуту и 36 секунд
  Кстати где расположены заряды? Тоже было бы неплохо нарисовать для оценки правильности конфигурации поля.

Добавлено через 5 минут и 6 секунд
Цитата(Alexeis @  26.12.2008,  19:18 Найти цитируемый пост)
хорошо бы еще опорные точки отрисовать, тогда было бы понятнее.

  Хотя не где точки понятно, они в узлах сетки... стоит проверить еще точность расчетов потенциалов и сам алгоритм интерполяции.

Добавлено через 7 минут и 27 секунд
  Может еще сетка грубовата. Хорошо бы еще уменьшить шаг в расчетах потенциалов.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ElPuzo
Дата 26.12.2008, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.12.2008

Репутация: нет
Всего: нет



потенциалы расчитываются с точностью 0,001 можно и большую сделать. Причем это сто процентов правильные данные по схожим формулам проверял. Потенциалы действительно в узлах сетки. Я грешу на интерполяцию, думаю завтра переделать алгоритм, возможно проблема с разбиением области на квадраты. Т.е. алгоритм разбиения простой между опорными точками по вертикали (включая их) находится 500 div (количество опорных точек по вертикали - 1) а по горизонтали 700 div (количество опорных точек по горизонтали- 1) тут явно из-за округления будет неточность. Я хочу попробывать строго определенное количечтво точек ставить к примеру 20.

Кстати я не учитывал (наверно), что сетка в этом примере прямоугольная с отношением 1:2 правда не знаю как это реализовать, о форме сетки можно судить по коефициентам уравнения, правда коэфициенты могут менятся в конкретное точки если там дополнительные потенциал (в этом не уверен). А прога должна быть универсальна под любые задачи.
PM MAIL   Вверх
ElPuzo
Дата 27.12.2008, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.12.2008

Репутация: нет
Всего: нет



Тут еще проблема возникла. На примере который я показывал не заметна, а когда стал другую задачу решать, то при закрытии окна программы выскакивает сообщение об ошибки:
user posted image
а следом за ней:
user posted image

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

image1.canvas.CleanupInstance ;

а на вторую задачу в сущность отличающуюся только цифрами: это не действует, получается я не правильно определил источник проблемы?

Может кто подскажет, что можно с этим поделать
PM MAIL   Вверх
Alexeis
Дата 27.12.2008, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



  AV бывают он неправильной работы с памятью. Скорее всего выходишь за границы массивов.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ElPuzo
Дата 27.12.2008, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.12.2008

Репутация: нет
Всего: нет



Такие сообщения появляются при закрытии программы, то есть когда все уже начерчено и сделано.
PM MAIL   Вверх
Alexeis
Дата 27.12.2008, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Цитата(ElPuzo @  27.12.2008,  20:39 Найти цитируемый пост)
Такие сообщения появляются при закрытии программы, то есть когда все уже начерчено и сделано. 

  А это не важно, AV часто возникают при удалении несуществующих объектов, адрес затерся и стал невалидным, попытался удалить вот и AV.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ElPuzo
Дата 29.12.2008, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.12.2008

Репутация: нет
Всего: нет



тут еще проблема: я рисую на канве тимиджа. Мне нужго как-то обновлять содержимое, а я не знаю как это делать. Идея состоит в следующем: я хочу после отрисовки графика предоставлять пользователю возможность изменения маштаба сетки. А у меня новая сетка поверх старой рисуется и ширина с высотой почему то не меняется как быть?
PM MAIL   Вверх
Alexeis
Дата 29.12.2008, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Самый простой способ нарисовать поверх прямоугольник белого цвета размером в картинку. По умолчанию прямоугольник рисуется в заливкой, потому все чтобы будет внутри него будет очищено.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0624 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.