Уроки, алгоритмы, программы, примеры

Вход на сайт

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

У Вас число превысит максимальное число int. Можно использовать в Вашем случае uint, но лучше все переписать на double.
Добавление к программе строки glutReshapeFunc(changeSize); приводит к тому, что треугольник перестаёт совсем отрисовываться.
Выдаёт ошибку glut32.dll не найден! При том, что он лежит в System32! Всё решил) Нужно отправить не в System32, а в System.
Спасибо за статью. Я не Ваш студент. Но мне она помогла написать функцию для Канторова множества на Python для черепашки: import turtle def kanter(x, y, d):     if d > 1:         turtle...
Как реализовать в данном примере границы расчёта?

Счетчики и рейтинг

Рейтинг@Mail.ru Яндекс.Метрика

Псевдоскалярным (или косым) произведением векторов a и b на плоскости называют число

ab = |a|•|b|• sin(φ),

где φ - угол вращения (против часовой стрелки) от a к b. Если хотя бы один из векторов нулевой, то полагают ab = 0.

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

С её помощью удобно работать с площадями многоугольников, выражать условия коллинеарности векторов и находить углы между ними.

Основные свойства:
  1. Линейность: a ∧ (λb + μc) = λab + μac (λ, μ - произвольные вещественные числа).
  2. Антикоммутативность: ab != - ba.
  3. Ориентированная площадь треугольника ABC выражается формулой S = (ABAC) / 2, а его площадь равна модулю этой величины.
  4. ab = 0 - необходимое и достаточное условие коллинеарности ненулевых векторов на плоскости.
  5. Пусть заданы вектора a = (a1, a2), b = (b1, b2). Тогда их псевдоскалярное произведение равно ab = a1b2 - a2b1

Использование в геометрических задачах

Пример 1. Определить взаимное расположении точки и прямой: лежит выше прямой, на прямой, под прямой.

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

Пример 2. Определить, принадлежит ли точка отрезку.

Пусть точки P1(x1, y1), P2(x2, y2) - концы заданного отрезка. Необходимым условием принадлежности точки отрезку является ее принадлежность прямой проходящей через P1, P2. Далее нужно определить лежит ли точка между точками P1 и P2. Для этого используем скалярное произведение векторов MP1, MP2. Если оно меньше либо равно нуля, то точка лежит на отрезке, иначе вне отрезка.

Итак, для того чтобы точка M(x, y) лежала на отрезке с концами P1(x1, y1), P2(x2, y2) необходимо и достаточно выполнения условий:
1. [P1P2, P1M] = 0 – косое произведение (точка лежит на прямой);
2. (MP1, MP2) ≤ 0 – скалярное произведение (точка лежит между P1 и P2).

Пример 3. Определить, пересекаются ли две прямые (прямые не совпадают).

Если прямые заданы точками P1(x1, y1), P2(x2, y2), M1(x3, y3), M2(x4, y4), то условие их параллельности заключается в проверки косого произведения векторов P1P2 и M1M2: если оно равно нулю, то прямые параллельны, иначе - пересекаются.

Пример 4. Определить, пересекаются ли два отрезка.

Отрезки пересекаются тогда, когда, концы каждого отрезка лежат по разные стороны от другого отрезка. Посмотрим на рисунок:

Необходимо проверить, лежат ли концы каждого из отрезков по разные стороны относительного концов другого отрезка. Применим косое произведение векторов. Посмотрим на первый рисунок: [P1P2, P1M2] * [P1P2, P1M1] < 0 и [M1M2, M1P1] * [M1M2, M1P2] < 0. Важно обратить внимание на строгое неравенство, потому что возможен случай, при котором произведение равно нулю, но отрезки не пересекаются (отрезки лежат на одной прямой, но не имеют общих точек). Поэтому необходимо проверить, принадлежит ли хотя бы один конец каждого отрезка другому.