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

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

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2010, 17:26   #1
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию Нахождение нормали к ребру прямоугольника

Здравствуйте. Задача реализовать алгоритм Кируса-Бека. Это я сделал, он работает, но не могу найти нормаль к каждому ребру прямоугольника, не силён в геометрии.

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

И так дан прямоугольник:


Из справочника:
Цитата:
Как рассчитывается нормаль? Для начала возьмем три точки (a,b и c). По этим точкам необходимо вычислить вектора p (из точки a в b) и q (из a в с):
p = b - a
q = c - a
Ну беру я три точки a,b,c
px:=bx-ax;
py:=by-by;
qx:=cx-ax;
qy:=cy-ay;

Цитата:
Получив два этих вектора вычисляем нормаль как перекрестное произведение векторов p и q с нормализацией результата. Это можно представить в псевдокоде как:
n = Cross(p, q);
Normalize(n);
Вычисляю перекрёстное произведение векторов:
I := qx*py-px*qy;
По-моему здесь я делаю что то не правильно? Ну а дальше нормализация.

Цитата:
Для нормализации результата необходимо разделить каждый параметр вектора на его длину, которая вычисляется как:
length = Sqrt(x2+y2+z2);
Я в принципе сам бы сидел и мучался, может быть что то и "намучил", но времени не так много осталось.
Изображения
Тип файла: jpg prm.jpg (39.9 Кб, 70 просмотров)
dr.Chas вне форума Ответить с цитированием
Старый 05.01.2010, 21:16   #2
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

Что-то мне ни кто не хочет помогать. Не ужели ни кто не знает?

Вот переписал с си, на делфи.
Код:
prmx_[1]:=0;  prmx_[2]:=0; prmx_[3]:=7; prmx_[4]:=7;
prmy_[1]:=0;  prmy_[2]:=5; prmy_[3]:=5; prmy_[4]:=0;
{а если в prmx и prmy зададим размеры реального прямоугольника начерченного на форме то не  работает}

//wnormx, wnormy  - массив с нормалями
i:=0;  
vox:=prmx_[4]; voy:=prmy_[4];   //последние координаты прямоугольника
j:=1;
   repeat
    inc(i);
    if i>3 then j:=0;
    vix:=prmx_[i]; viy:=prmy_[i];
    vnx:=viy-voy;  vny:=vox-vix;
    vox:=vix; voy:=viy;
    wnormx[i]:=vnx; wnormy[i]:=vny;
   until j=0;
Работает но с не большим но. Если подставлять координаты т.е. (1,2) (декартовой системы координат). То всё работает. А если подставляю значения из делфи, то не работает. Почему?
dr.Chas вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
3 прямоугольника разных цветов jekidollar Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 02.12.2009 10:12
Вращение прямоугольника Ponaroshku Паскаль, Turbo Pascal, PascalABC.NET 11 03.11.2009 09:22
Вращение прямоугольника Ponaroshku Общие вопросы Delphi 0 25.05.2009 23:09
Стороны прямоугольника Caragius Microsoft Office Excel 8 27.12.2008 03:02
Проблема с рисованием прямоугольника Юра. Общие вопросы Delphi 13 04.08.2007 06:08