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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2009, 15:29   #1
Orodret
Пользователь
 
Аватар для Orodret
 
Регистрация: 12.04.2009
Сообщений: 29
По умолчанию ориентация треугольника

На плоскости заданы декартовы координаты трёх точек А, В и С. Написать программу , возвращающую нуль, если при движении по направлению АВ точка С остаётся справа и единицу в противном случае.
Кто-нибудь может подсказать алгоритм, мне в голову ничего не приходит
Orodret вне форума Ответить с цитированием
Старый 08.06.2009, 16:48   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

На уровне идеи: по точкам A и B находим уравнение прямой. Ищем точку пересечения прямой из точки C, перпендикулярной AB, с AB. Потом находим угол между прямыми. Если от 0 до 90 или от 270 до 360, то точка справа, иначе - слева.

Как-то так.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 08.06.2009, 18:53   #3
Pashan
Пользователь
 
Регистрация: 18.03.2009
Сообщений: 89
По умолчанию

Есть еще одна мысль на уровне идеи. Может, воспользоваться векторным произведением векторов?

На всякий случай: http://ru.wikipedia.org/wiki/Векторное_произведение

По определению в результате векторного произведения получается вектор, который перпендикулярен обоим векторам и направлен в зависимости от расположения этих векторов (как раз правая/левая тройка векторов получается). В нашем случае два исходных вектора лежат в плоскости XY. Значит, конечный вектор будет лежать только на оси Z и его направление легко определяется знаком Z-координаты.

По определению [a,b] = (a_y*b_z - a_z*b_y, a_z*b_x - a_x*b_z, a_x*b_y - a_y*b_x)
Берем вместо a и b вектора
AB = (B_x - A_x, B_y - A_y, 0)
и
AC = (C_x - A_x, C_y - A_y, 0)
Поскольку z у них равен 0, то все упрощается:
[AB,AC] = (0, 0, AB_x*AC_y - AB_y*AC_x)
То есть нас интересует только знак выражения AB_x*AC_y - AB_y*AC_x, и все! А если точка C лежит на прямой AB, должны получить 0.

Скажите, если я ошибаюсь
Pashan вне форума Ответить с цитированием
Старый 08.06.2009, 20:20   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Код:
S := (A.X*B.Y + A.Y*C.X + B.X*C.Y - C.X*B.Y - B.X*A.Y - C.Y*A.X);
В зависимости от знака S (<0, >0, =0) - справа, слева, на прямой
http://programmersforum.ru/showthrea...621#post206621

Целая тема была про направление обхода
alexBlack вне форума Ответить с цитированием
Старый 08.06.2009, 21:54   #5
Orodret
Пользователь
 
Аватар для Orodret
 
Регистрация: 12.04.2009
Сообщений: 29
По умолчанию

alexBlack спасибо заработало, и ещё кто-нибудь знает как найти ортоцентр треугольника (т. пересечения высот) если даны его вершины и как определить ортоганальна ли заданная матрица n на n элементов??????? Подкиньте идею

Последний раз редактировалось Orodret; 08.06.2009 в 22:14.
Orodret вне форума Ответить с цитированием
Старый 08.06.2009, 22:47   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Orodret
и ещё кто-нибудь знает как найти ортоцентр треугольника (т. пересечения высот) если даны его вершины
Через скалярное произведение векторов:
<AC*BH> = 0
<BC*AH> = 0
где H - точка пересечения высот

Цитата:
Сообщение от Orodret
и как определить ортоганальна ли заданная матрица n на n элементов???????
http://ru.wikipedia.org/wiki/Ортогональная_матрица

ps Не оффтопим
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 08.06.2009, 23:31   #7
Orodret
Пользователь
 
Аватар для Orodret
 
Регистрация: 12.04.2009
Сообщений: 29
По умолчанию

Но как из этого найти H?
Orodret вне форума Ответить с цитированием
Старый 09.06.2009, 00:45   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Orodret
Но как из этого найти H?
Каждая точка имеет координаты.
Код:
BH = sqrt(sqr(Bx-Hx)+sqr(By-Hy))
аналогично с AH. Имеем систему уравнений с двумя неизвестными (Hx,Hy)
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 09.06.2009, 01:14   #9
Orodret
Пользователь
 
Аватар для Orodret
 
Регистрация: 12.04.2009
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
Имеем систему уравнений с двумя неизвестными (Hx,Hy)
Но AH и BH нам тоже не известны
Получается 2 уравнения и 4 неизвестных, нехорошо
Orodret вне форума Ответить с цитированием
Старый 09.06.2009, 01:28   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Orodret
Но AH и BH нам тоже не известны
Получается 2 уравнения и 4 неизвестных, нехорошо
Неизвестные - координаты x и y для точки H. Координаты всех остальных точек у вас есть.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вращение треугольника в С++ bum90 Помощь студентам 3 28.04.2009 15:28
Паскаль, вращение треугольника. Arizonec Помощь студентам 4 03.01.2009 18:52
Определить тип треугольника michailevg Общие вопросы C/C++ 3 15.12.2008 17:29
Дальний рубеж треугольника Паскаля NecRomant Общие вопросы Delphi 3 05.11.2008 17:03