Графическое отображение точки на комплексном чертеже.

Рассмотрим следующий рисунок.

На нем изображен график функции y = x^3 – 3*x^2. Рассмотрим некоторый интервал содержащий точку х = 0, например от -1 до 1. Такой интервал еще называют окрестностью точки х = 0. Как видно на графике, в этой окрестности функция y = x^3 – 3*x^2 принимает наибольшее значение именно в точке х = 0.

Максимум и минимум функции

В таком случае, точку х = 0 называют точкой максимума функции. По аналогии с этим, точку х = 2 называют точкой минимума функции y = x^3 – 3*x^2. Потому что существует такая окрестность этой точки, в которой значение в этой точке будет минимальным среди всех других значений из этой окрестности.

Точкой максимума функции f(x) называется точка x0, при условии, что существует окрестность точки х0 такая, что для всех х не равных х0 из этой окрестности, выполняется неравенство f(x) < f(x0).

Точкой минимума функции f(x) называется точка x0, при условии, что существует окрестность точки х0 такая, что для всех х не равных х0 из этой окрестности, выполняется неравенство f(x) > f(x0).

В точках максимума и минимума функций значение производной функции равно нулю. Но это не достаточное условие для существования в точке максимума или минимума функции.

Например, функция y = x^3 в точке х = 0 имеет производную равную нулю. Но точка х = 0 не является точкой минимума или максимума функции. Как известно функция y = x^3 возрастает на всей числовой оси.

Таким образом, точки минимума и максимума всегда будут находиться среди корне уравнения f’(x) = 0. Но не все корни этого уравнения будут являться точками максимума или минимума.

Стационарные и критические точки

Точки, в которых значение производной функции равно нулю, называются стационарными точками. Точки максимума или минимума могут иметься и вточках, в которых производной у функции вообще не существует. Например, у = |x| в точке х = 0 имеет минимум, но производной в этой точке не существует. Эта точка будет являться критической точкой функции.

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

Пусть f(x) некоторая дифференцируемая на интервале (a;b) функция. Точка х0 принадлежит этому интервалу и f’(x0) = 0. Тогда:

1. если при переходе через стационарную точку х0 функция f(x) и её производная меняет знак, с «плюса» на «минус», тогда точка х0 является точкой максимума функции.

2. если при переходе через стационарную точку х0 функция f(x) и её производная меняет знак, с «минуса» на «плюс», тогда точка х0 является точкой минимума функции.

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

Сначала немного воспоминаний
Было это в бытность мою студентом одного из технических Вузов в 90-е, курсе наверно втором. Попал я как-то на олимпиаду по программированию. И вот на этой самой олимпиаде и было задача: задать координаты треугольника, тестовой точки на плоскости, и определить принадлежит ли эта точка области треугольника. В общем, плевая задачка, но тогда я ее так и не решил. Но после задумался – над более общей задачей – принадлежность полигону. Повторюсь – была середина 90 –х, интернета не было, книжек по компьютерной геометрии не было, а были лекции по вышке и лаборатория 286 –х с турбо паскалем. И вот так совпали звезды, что как раз в то время когда я размышлял над проблемой, на вышке нам читали теорию комплексного переменного. И одна формула (о ней ниже) упала на благодатную почву. Алгоритм был придуман и реализован на паскале (к сожалению мой полутора гиговый винт погиб и унес в небытие этот код и кучу других моих юношеских наработок). После института я попал работать в один НИИ. Там мне пришлось заниматься разработкой ГИС для нужд работников института и собственной одной из задачей было определение попадания объектов в контур. Алгоритм был переписан на С++ и отлично зарекомендовал себя в работе.

Задача для алгоритма

Дано:
Г- замкнутая ломаная (далее полигон) на плоскости, заданная координатами своих вершин (xi,yi), и координата тестовой точки (x0,y0)
Определить:
принадлежит ли точка области D, ограниченной полигоном.

Вывод формул для последующего написания алгоритма ни в коем случае не претендует на математическую полноту и точность, а лишь демонстрирует инженерный (потребительский подход) к Царице полей наук.

Пояснение с рабоче-крестьянской инженерной точки зрения:
- граница Г наш заданный контур,
- z0 -тестируемая точка
- f(z) - комплексная функция от комплексного аргумента нигде в контуре не обращается в бесконечность.

Те есть, чтобы установить принадлежность точки контуру, нам необходимо вычислить интеграл и сравнить его со значением функции в данной точки. Если они совпадают, то точка лежит в контуре. Замечание: интегральная теорема коши гласит, что если точка не лежит в контуре, те подынтегральное выражение нигде не обращается в бесконечность, то интеграл равен нулю. Это упрощает дело – нужно лишь вычислить интеграл и проверить его на равенство нулю: равен нулю точка не контура, отличен - лежит в контуре.
Займемся вычислением интеграла. За f(z) примем простую функцию 1. Не нарушая общности можно за z0 принять точку 0 (всегда можно сдвинуть координаты).

Избавляемся от мнимой единицы в знаменателе подынтегральной части и расщепим интеграл на действительную и мнимую части:

Получилось два криволинейных интеграла II рода.
Вычислим первый

Выполнятся условие не зависимости интеграла от пути, следовательно, первый интеграл равен нулю и его вычислять не нужно.

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

Где Гi- это отрезок (xi,yi)- (xi+1,y i+1)
Вычислим i-ый интеграл. Для этого запишем уравнение i-го отрезка в параметрическом виде

Подставим в интеграл

И после громоздких и нудных преобразований получим следующую прельстивую формулу:

Окончательно получаем

Алгоритм на C++:

template <class T>
bool pt_in_polygon(const T &test,const std::vector &polygon)
{
if (polygon.size()<3) return false;

Std::vector::const_iterator end=polygon.end();

T last_pt=polygon.back();

Last_pt.x-=test.x;
last_pt.y-=test.y;

double sum=0.0;

for (
std::vector::const_iterator iter=polygon.begin();
iter!=end;
++iter
{
T cur_pt=*iter;
cur_pt.x-=test.x;
cur_pt.y-=test.y;

double del= last_pt.x*cur_pt.y-cur_pt.x*last_pt.y;
double xy= cur_pt.x*last_pt.x+cur_pt.y*last_pt.y;

Sum+=
atan((last_pt.x*last_pt.x+last_pt.y*last_pt.y - xy)/del)+
atan((cur_pt.x*cur_pt.x+cur_pt.y*cur_pt.y- xy)/del)
);

Last_pt=cur_pt;

return fabs(sum)>eps;

T – тип точки, например:
struct PointD
{
double x,y;
};

Управление:
клик левой кнопкой – добавление новой точки контура
правой кнопкой - замыкание контура
левой с зажатым Shift-ом – перенос тестовой точки

Господа, кому интересно, привожу более быстрый алгоритм. Уже не мой.
Отдельное и огромное спасибо за статейку.
template bool pt_in_polygon2(const T &test,const std::vector &polygon)
{

Static const int q_patt= { {0,1}, {3,2} };

If (polygon.size()<3) return false;

Std::vector::const_iterator end=polygon.end();
T pred_pt=polygon.back();
pred_pt.x-=test.x;
pred_pt.y-=test.y;

Int pred_q=q_patt;

For(std::vector::const_iterator iter=polygon.begin();iter!=end;++iter)
{
T cur_pt = *iter;

Cur_pt.x-=test.x;
cur_pt.y-=test.y;

Int q=q_patt;

Switch (q-pred_q)
{
case -3:++w;break;
case 3:--w;break;
case -2:if(pred_pt.x*cur_pt.y>=pred_pt.y*cur_pt.x) ++w;break;
case 2:if(!(pred_pt.x*cur_pt.y>=pred_pt.y*cur_pt.x)) --w;break;
}

Pred_pt = cur_pt;
pred_q = q;

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

Шаги

Точка пересечения двух прямых

    Запишите уравнение каждой прямой, обособив переменную «у» на левой стороне уравнения. Другие члены уравнения должны размещаться на правой стороне уравнения. Возможно, данное вам уравнение вместо «у» будет содержать переменную f(x) или g(x); в этом случае обособьте такую переменную. Для обособления переменной выполните соответствующие математические операции на обеих сторонах уравнения.

    • Если уравнения прямых вам не даны, на основе известной вам информации.
    • Пример . Даны прямые, описываемые уравнениями и y − 12 = − 2 x {\displaystyle y-12=-2x} . Чтобы во втором уравнении обособить «у», прибавьте к обеим сторонам уравнения число 12:
  1. Вы ищете точку пересечения обеих прямых, то есть точку, координаты (х,у) которой удовлетворяют обоим уравнениям. Так как на левой стороне каждого уравнения находится переменная «у», то выражения, расположенные с правой стороны каждого уравнения, можно приравнять. Запишите новое уравнение.

    • Пример . Так как y = x + 3 {\displaystyle y=x+3} и y = 12 − 2 x {\displaystyle y=12-2x} , то можно записать такое равенство: .
  2. Найдите значение переменной «х». Новое уравнение содержит только одну переменную «х». Для нахождения «х» обособьте эту переменную на левой стороне уравнения, выполнив соответствующие математические операции на обеих сторонах уравнения. Вы должны получить уравнение вида х = __ (если вы не можете это сделать, этого раздела).

    • Пример . x + 3 = 12 − 2 x {\displaystyle x+3=12-2x}
    • Прибавьте 2 x {\displaystyle 2x} к каждой стороне уравнения:
    • 3 x + 3 = 12 {\displaystyle 3x+3=12}
    • Вычтите 3 из каждой стороны уравнения:
    • 3 x = 9 {\displaystyle 3x=9}
    • Разделите каждую сторону уравнения на 3:
    • x = 3 {\displaystyle x=3} .
  3. Используйте найденное значение переменной «х» для вычисления значения переменной «у». Для этого подставьте найденное значение «х» в уравнение (любое) прямой.

    • Пример . x = 3 {\displaystyle x=3} и y = x + 3 {\displaystyle y=x+3}
    • y = 3 + 3 {\displaystyle y=3+3}
    • y = 6 {\displaystyle y=6}
  4. Проверьте ответ. Для этого подставьте значение «х» в другое уравнение прямой и найдите значение «у». Если вы получите разные значение «у», проверьте правильность ваших вычислений.

    • Пример: x = 3 {\displaystyle x=3} и y = 12 − 2 x {\displaystyle y=12-2x}
    • y = 12 − 2 (3) {\displaystyle y=12-2(3)}
    • y = 12 − 6 {\displaystyle y=12-6}
    • y = 6 {\displaystyle y=6}
    • Вы получили такое же значение «у», поэтому в ваших вычислениях ошибок нет.
  5. Запишите координаты (х,у). Вычислив значения «х» и «у», вы нашли координаты точки пересечения двух прямых. Запишите координаты точки пересечения в виде (х,у).

    • Пример . x = 3 {\displaystyle x=3} и y = 6 {\displaystyle y=6}
    • Таким образом, две прямые пересекаются в точке с координатами (3,6).
  6. Вычисления в особых случаях. В некоторых случаях значение переменной «х» найти нельзя. Но это не значит, что вы допустили ошибку. Особый случай имеет место при выполнении одного из следующих условий:

    • Если две прямые параллельны, они не пересекаются. При этом переменная «х» просто сократится, а ваше уравнение превратится в бессмысленное равенство (например, 0 = 1 {\displaystyle 0=1} ). В этом случае в ответе запишите, что прямые не пересекаются или решения нет.
    • Если оба уравнения описывают одну прямую, то точек пересечения будет бесконечное множество. При этом переменная «х» просто сократится, а ваше уравнение превратится в строгое равенство (например, 3 = 3 {\displaystyle 3=3} ). В этом случае в ответе запишите, что две прямые совпадают.

    Задачи с квадратичными функциями

    1. Определение квадратичной функции. В квадратичной функции одна или несколько переменных имеют вторую степень (но не выше), например, x 2 {\displaystyle x^{2}} или y 2 {\displaystyle y^{2}} . Графиками квадратичных функций являются кривые, которые могут не пересекаться или пересекаться в одной или двух точках. В этом разделе мы расскажем вам, как найти точку или точки пересечения квадратичных кривых.

    2. Перепишите каждое уравнение, обособив переменную «у» на левой стороне уравнения. Другие члены уравнения должны размещаться на правой стороне уравнения.

      • Пример . Найдите точку (точки) пересечения графиков x 2 + 2 x − y = − 1 {\displaystyle x^{2}+2x-y=-1} и
      • Обособьте переменную «у» на левой стороне уравнения:
      • и y = x + 7 {\displaystyle y=x+7} .
      • В этом примере вам дана одна квадратичная функция и одна линейная функция. Помните, что если вам даны две квадратичные функции, вычисления аналогичны шагам, изложенным далее.
    3. Приравняйте выражения, расположенные с правой стороны каждого уравнения. Так как на левой стороне каждого уравнения находится переменная «у», то выражения, расположенные с правой стороны каждого уравнения, можно приравнять.

      • Пример . y = x 2 + 2 x + 1 {\displaystyle y=x^{2}+2x+1} и y = x + 7 {\displaystyle y=x+7}
    4. Перенесите все члены полученного уравнения на его левую сторону, а на правой стороне запишите 0. Для этого выполните базовые математические операции. Это позволит вам решить полученное уравнение.

      • Пример . x 2 + 2 x + 1 = x + 7 {\displaystyle x^{2}+2x+1=x+7}
      • Вычтите «x» из обеих сторон уравнения:
      • x 2 + x + 1 = 7 {\displaystyle x^{2}+x+1=7}
      • Вычтите 7 из обеих сторон уравнения:
    5. Решите квадратное уравнение. Перенеся все члены уравнения на его левую сторону, вы получили квадратное уравнение. Его можно решить тремя способами: при помощи специальной формулы, и .

      • Пример . x 2 + x − 6 = 0 {\displaystyle x^{2}+x-6=0}
      • При разложении уравнения на множители вы получите два двучлена, при перемножении которых получается исходное уравнение. В нашем примере первый член x 2 {\displaystyle x^{2}} можно разложить на х*х. Сделайте следующую запись: (x)(x) = 0
      • В нашем примере свободный член -6 можно разложить на следующие множители: − 6 ∗ 1 {\displaystyle -6*1} , − 3 ∗ 2 {\displaystyle -3*2} , − 2 ∗ 3 {\displaystyle -2*3} , − 1 ∗ 6 {\displaystyle -1*6} .
      • В нашем примере второй член – это х (или 1x). Сложите каждую пару множителей свободного члена (в нашем примере -6), пока не получите 1. В нашем примере подходящей парой множителей свободного члена являются числа -2 и 3 ( − 2 ∗ 3 = − 6 {\displaystyle -2*3=-6} ), так как − 2 + 3 = 1 {\displaystyle -2+3=1} .
      • Заполните пробелы найденной парой чисел: .
    6. Не забудьте про вторую точку пересечения двух графиков. Если вы решаете задачу быстро и не очень внимательно, вы можете забыть про вторую точку пересечения. Вот как найти координаты «х» двух точек пересечения:

      • Пример (разложение на множители) . Если в уравнении (x − 2) (x + 3) = 0 {\displaystyle (x-2)(x+3)=0} одно из выражений в скобках будет равно 0, то все уравнение будет равно 0. Поэтому можно записать так: x − 2 = 0 {\displaystyle x-2=0} x = 2 {\displaystyle x=2} и x + 3 = 0 {\displaystyle x+3=0} x = − 3 {\displaystyle x=-3} (то есть вы нашли два корня уравнения).
      • Пример (использование формулы или дополнение до полного квадрата) . При использовании одного из этих методов в процессе решения появится квадратный корень. Например, уравнение из нашего примера примет вид x = (− 1 + 25) / 2 {\displaystyle x=(-1+{\sqrt {25}})/2} . Помните, что при извлечении квадратного корня вы получите два решения. В нашем случае: 25 = 5 ∗ 5 {\displaystyle {\sqrt {25}}=5*5} , и 25 = (− 5) ∗ (− 5) {\displaystyle {\sqrt {25}}=(-5)*(-5)} . Поэтому запишите два уравнения и найдите два значения «х».
    7. Графики пересекаются в одной точке или вообще не пересекаются. Такие ситуации имеют место при соблюдении следующих условий:

      • Если графики пересекаются в одной точке, то квадратное уравнение раскладывается на одинаковые множители, например, (х-1) (х-1) = 0, а в формуле появляется квадратный корень из 0 ( 0 {\displaystyle {\sqrt {0}}} ). В этом случае уравнение имеет только одно решение.
      • Если графики вообще не пересекаются, то уравнение на множители не раскладывается, а в формуле появляется квадратный корень из отрицательного числа (например, − 2 {\displaystyle {\sqrt {-2}}} ). В этом случае в ответе напишите, что решения нет.
Это вторая часть моей статьи посвящена вычислительной геометрии. Думаю, эта статья будет интереснее предыдущей, поскольку задачки будут чуть сложнее.

Начнем с взаимного расположения точки относительно прямой, луча и отрезка.

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

Решение
Понятно, что если прямая задана своим уравнением ax + by + c = 0, то тут и решать нечего. Достаточно подставить координаты точки в уравнение прямой и проверить чему оно равно. Если больше нуля, то точка находится в верхней полуплоскости, если равна нулю, то точка находится на прямой и если меньше нуля, то точка находится в нижней полуплоскости. Интереснее случай, когда прямая задана, задана координатами двух точек назовем их P 1 (x 1 , y 1), P 2 (x 2 , y 2). В этом случае можно спокойно найти коэффициенты a, b и c и применить предыдущее рассуждение. Но надо сначала подумать, оно нам надо? Конечно, нет! Как я говорил косое произведения - это просто жемчужина вычислительной геометрии. Давайте применим его. Известно, что косое произведение двух векторов положительно, если поворот от первого вектора ко второму идет против часовой стрелки, равно нулю, если векторы коллинеарны и отрицательно, если поворот идет по часовой стрелки. Поэтому нам достаточно посчитать косое произведение векторов P 1 P 2 и P 1 M и по его знаку сделать вывод.

Задача №2
Определить принадлежит ли точка лучу.

Решение
Давайте вспомним, что такое луч: луч - это прямая, ограниченная точкой с одной стороны, а с другой стороны бесконечная. То есть луч задается некоторой начальной точкой и любой точкой лежащей на нем. Пусть точка P 1 (x 1 , y 1) - начало луча, а P 2 (x 2 , y 2) - любая точка принадлежащая лучу. Понятно, что если точка принадлежит лучу, то она принадлежит и прямой проходящей через эти точки, но не наоборот. Поэтому принадлежность прямой является необходимым, но не достаточным условием для принадлежности лучу. Поэтому от проверки косового произведения нам никуда не деться. Для достаточного условия нужно вычислить еще и скалярное произведение тех же векторов. Если оно меньше нуля, то точка не принадлежит лучу, если же оно не отрицательно, то точка лежит на луче. Почему так? Давайте посмотрим на рисунок.

Итак, для того чтобы точка M(x, y) лежала на луче с начальной точкой P 1 (x 1 , y 1), где P 2 (x 2 , y 2) лежит на луче необходимо и достаточно выполнения двух условий:

2. (P 1 P 2 , P 1 M) ≥ 0 – скалярное произведение (точка лежит на луче)

Задача №3
Определить принадлежит ли точка отрезку.

Решение
Пусть точки P 1 (x 1 , y 1), P 2 (x 2 , y 2) концы заданного отрезка. Опять-таки необходимым условием принадлежности точки отрезку является ее принадлежность прямой проходящей через P 1 , P 2 . Далее нам нужно определить лежит ли точка между точками P 1 и P 2 , для этого нам на помощь приходит скалярное произведение векторов только на этот раз других: (MP 1 , MP 2). Если оно меньше либо равно нуля, то точка лежит на отрезке, иначе вне отрезка. Почему так? Посмотрим на рисунок.

Итак, для того чтобы точка M(x, y) лежала на отрезке с концами P 1 (x 1 , y 1), P 2 (x 2 , y 2) необходимо и достаточно выполнения условий:
1. = 0 – косое произведение (точка лежит на прямой)
2. (MP 1 ,MP 2) ≤ 0 – скалярное произведение (точка лежит между P 1 и P 2)

Задача №4
Взаимное расположение двух точек относительно прямой.

Решение
В этой задаче необходимо определить по одну или по разные стороны относительно прямой находятся две точки.

Если точки находятся по разные стороны относительно прямой, то косые произведения имеют разные знаки, а значит их произведение отрицательно. Если же точки лежат по одну сторону относительно прямой, то знаки косых произведений совпадают, значит, их произведение положительно.
Итак:
1. * < 0 – точки лежат по разные стороны.
2. * > 0 – точки лежат по одну сторону.
3. * = 0 – одна (или две) из точек лежит на прямой.

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

Задача №5
Определить пересекаются ли две прямые.

Решение
Будем считать, что прямые не совпадают. Понятно, что прямые не пересекаются, только если они параллельны. Поэтому, найдя условие параллельности, мы можем, определить пересекаются ли прямые.
Допустим прямые заданы своими уравнениями a 1 x + b 1 y + c 1 = 0 и a 2 x + b 2 y + c 2 = 0. Тогда условие параллельности прямых заключается в том, что a 1 b 2 - a 2 b 1 = 0.
Если же прямые заданы точками P 1 (x 1 , y 1), P 2 (x 2 , y 2), M 1 (x 3 , y 3), M 2 (x 4 , y 4), то условие их параллельности заключается в проверки косого произведения векторов P 1 P 2 и M 1 M 2: если оно равно нулю, то прямые параллельны.

В общем, то когда прямые заданы своими уравнениями мы тоже проверяем косое произведение векторов (-b 1 , a 1), (-b 2 , a 2) которые называются направляющими векторами.

Задача №6
Определить пересекаются ли два отрезка.

Решение
Вот эта задача мне, действительно, нравится. Отрезки пересекаются тогда, когда, концы каждого отрезка лежат по разные стороны от другого отрезка. Посмотрим на рисунок:

Итак, нам нужно проверить, чтобы концы каждого из отрезков лежали по разные стороны относительного концов другого отрезка. Пользуемся косым произведением векторов. Посмотрите на первый рисунок: > 0, < 0 => * < 0. Аналогично
* < 0. Вы наверно думаете, почему не меньше либо равно. А потому, что возможен следующий случай, при котором векторное произведение как раз и равно нулю, но отрезки не пересекаются:

Поэтому нам необходимо сделать еще одну проверку, а именно: принадлежит ли хотя бы один конец каждого отрезка другому (принадлежность точки отрезку). Эту задачу мы уже решали.

Итак, для того чтобы отрезки имели общие точки необходимо и достаточно:
1. Концы отрезков лежат по разные стороны относительно другого отрезка.
2. Хотя бы один из концов одного отрезка принадлежит другому отрезку.

Задача №7
Расстояние от точки до прямой.

Решение
Пусть прямая задана двумя точками P 1 (x 1 , y 1) и P 2 (x 2 , y 2).

В предыдущей статье мы говорили о том, что геометрически косое произведение - это ориентированная площадь параллелограмма, поэтому S P 1 P 2 M = 0,5*. С другой стороны каждому школьнику известна формула для нахождения площади треугольника: половина основание на высоту.
S P 1 P 2 M = 0,5*h*P 1 P 2 .
Приравнивая эти площади, находим

По модулю взяли потому, что первая площадь ориентированная.

Если же прямая задана уравнением ax + by + c = 0, то уравнение прямой проходящей через точку M перпендикулярной заданной прямой есть: a(y - y 0) – b(x - x 0) = 0. Теперь спокойно можно решить систему из полученных уравнений, найти их точку пересечения и вычислить расстояние от исходной точки до найденной: оно будет ровно ρ = (ax 0 + by 0 + c)/√(a 2 + b 2).

Задача №8
Расстояние от точки до луча.

Решение
Эта задача отличается от предыдущей тем, что в этом случае может получиться, так что перпендикуляр из точки не падает на луч, а падает на его продолжение.

В случае, когда перпендикуляр не падает на луч необходимо найти расстояние от точки до начала луча – это и будет ответом на задачу.

Как же определить падает ли перпендикуляр на луч или нет? Если перпендикуляр не падает на луч, то угол MP 1 P 2 – тупой иначе острый (прямой). Поэтому по знаку скалярного произведения векторов мы можем определить попадает ли перпендикуляр на луч или нет:
1. (P 1 M, P 1 P 2) < 0 перпендикуляр не попадает на луч
2. (P 1 M, P 1 P 2) ≥ 0 перпендикуляр попадает на луч

Задача №9
Расстояние от точки до отрезка.

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

Чтобы определить попадает ли перпендикуляр на отрезок нужно по аналогии с предыдущей задачей использовать скалярное произведение векторов. Если перпендикуляр не падает на отрезок, то либо угол MP 1 P 2 либо угол MP 2 P 1 будут тупыми. Поэтому по знаку скалярных произведений мы можем определить попадает ли перпендикуляр на отрезок или нет:
Если (P 1 M, P 1 P 2) < 0 или (P 2 M, P 2 P 1) < 0 то перпендикуляр не падает на отрезок.

Задача №10
Определить количество точек прямой и окружности.

Решение
Прямая и окружность может иметь нуль, одну или две точки пересечения. Давайте посмотрим на рисунки:

Здесь из рисунков и так все понятно. Мы имеем две точки пересечения, если расстояние от центра окружности до прямой меньше радиуса окружности. Одну точку касания, если расстояние от центра до прямой равно радиусу. И наконец, ни одной точки пересечения, если расстояние от центра окружности до прямой больше радиуса окружности. Поскольку задача нахождения расстояние от точки до прямой была уже нами решена, то и эта задача тоже решена.

Задача №11
Взаимное расположение двух окружностей.

Решение
Возможные случаи расположения окружностей: пересекаются, касаются, не пересекаются.

Рассмотрим случай, когда окружности пересекаются, и найдем площадь их пересечения. Эту задачу я очень люблю, так как потратил на ее решение изрядное количество времени (было это давно - на первом курсе).




Вспомним теперь, что такое сектор и сегмент.

Пересечение кругов состоит из двух сегментов O 1 AB и O 2 AB.

Казалось бы необходимо сложить площади этих сегментов и все. Однако, все не так просто. Необходимо еще определить всегда ли эти формулы верны. Оказывается, нет!

Рассмотрим случай, когда центр второго круга O 2 совпадает с точкой C. В этом случае d 2 = 0 и за значение α примем α = π. В этом случае имеем полукруг с площадью 1/2 πR 2 2 .

Теперь рассмотрим случай, когда центр второго круга O 2 находится между точками O 1 и C. В этом случае получим отрицательное значение величины d 2 . Использование отрицательного значения d 2 приводит к отрицательному значению α. В этом случае необходимо для правильного ответа прибавить к α 2π.

Заключение
Ну вот и все. Мы рассмотрели не все, но наиболее часто встречаемые задачи вычислительной геометрии касающиеся взаимного расположения объектов.

Надеюсь, Вам понравилось.

Для решения задачи разделим ее на следующие этапы:

  1. Рассмотрение задачи со стороны многомерного пространства.
  2. Рассмотрение задачи со стороны двухмерного пространства.
  3. Расчет количества точек пересечения.

Рассмотрение задачи со стороны многомерного пространства

Допустим прямые находятся в трехмерном пространстве, тогда они могут быть не параллельными друг другу в одной из плоскостей и отстоять друг от друга в другой плоскости. Это значит то, что такие прямые будут попарно не параллельны и не будут иметь точек пересечения.

Рассмотрение задачи со стороны двухмерного пространства

В двухмерном пространстве (плоскость) не параллельность двух прямых означает, что они обязательно имеют одну и только одну точку пересечения. По условию прямые не проходят через одну (общую) точку пересечения, следовательно, так как прямые попарно не параллельны, то каждая из них обязательно пересекает оставшиеся.

Расчет количества точек пересечения

При добавлении на плоскость новой не параллельной прямой будут добавляться точки пересечения с теми прямыми, которые уже нанесены на плоскости. Следовательно, две прямые дают 1 точку пересечения. Добавляя третью прямую, мы получаем еще 2 точки пересечения с уже нанесенными двумя прямыми; добавляя четвертую прямую получаем еще 3 точки пересечения; пятую - еще 4 точки пересечения. Таким образом, всего получаем:

1 + 2 + 3 + 4 = 10 точек пересечения

Ответ: 1) многомерное пространство - 0 точек пересечения; 2) двухмерное пространство - 10 точек пересечения.

Две прямые имеют одну точку пересечения. Добавив к ним ещё одну прямую, мы получим ещё 2 точки пересечения с каждой из этих двух прямых. Добавив ещё одну прямую, она даст дополнительно столько точек пересечения, сколько уже было прямых, т.е. ещё 3. И так далее. Каждая n-ая прямая даёт дополнительно (n-1) точек пересечения с (n-1) прямыми.

1 + 2 + 3 + 4 = 10

Всё вышесказанное справедливо в случае если ни одна из любых 3 прямых не имеет 1 общую точку пересечения.

Если же всё-таки прямые могут пересекаться в одной точке, но не все сразу, то тогда расположив 4 прямые звездой мы имеем 1 их точку пересечения, и, добавив 5-ю прямую получим ещё 4 точки. В этом случае у 5 прямых будет 5 общих точек пересечения.

Ответ: 10 точек пересечения будет образовано 5 не параллельными прямыми, когда более 2 прямых не пересекается в одной точке. Или же 5 точек пересечения если более двух прямых может пересекаться в одной точке.

Loading...Loading...