Графическое отображение точки на комплексном чертеже. Задачи с квадратичными функциями

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

Такие точки называют стационарными . Если видите на графике непрерывной функции «горб» или «яму» помните, что максимум или минимум достигается в критической точке. Рассмотрим для примера следующее задание.

Пример 1. Найти критические точки функции y=2x^3-3x^2+5 .
Решение. Алгоритм нахождения критических точек следующий:

Итак функция имеет две критические точки.

Далее, если нужно провести исследование функции то определяем знак производной слева и справа от критической точки. Если производная при переходе через критическую точку меняет знак с «-» на «+» , то функция принимает локальный минимум . Если с «+» на «-» должны локальный максимум .

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

Функции с логарифмами и тригонометрические, которые не определены в этих точках


Третий тип критических точек имеют кусочно-непрерывные функции и модули.
Например любая модуль-функция имеет минимум или максимум в точке излома.

Например модуль y = | x -5 | в точке x = 5 имеет минимум (критическую точку).
Производная в ней не существует, а справа и слева принимает значение 1 и -1 соответственно.

Попробуйте определить критические точки функций

1)
2)
3)
4)
5)

Если в ответе у Вы получите значение
1) x=4;
2) x=-1;x=1;
3) x=9;
4) x=Pi*k;
5) x=1.
то Вы уже знаете как найти критические точки и сможете справиться с простой контрольной или тестами.

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

Сначала немного воспоминаний
Было это в бытность мою студентом одного из технических Вузов в 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}}} ). В этом случае в ответе напишите, что решения нет.

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

В общем случае плоскости проекций разделяют все пространство на 8 частей, которые называют октантами. В практике изображения геометрических объектов на чертежах из соображения удобства и наибольшей наглядности проецируемый объект располагают в I октанте. Поэтому в нашем курсе начертательной геометрии мы ограничимся рассмотрением геометрических объектов, расположенных только в этом октанте.

В том случае, когда точка занимает частное положение в пространстве, ее проекции расположены особенным образом. Частным положением точки считаем такое, при котором она находится либо на оси проекций, либо в плоскости проекций. Так, если точка расположена на оси проекций, тогда две ее проекции лежат на этой оси, а третья в начале координат. Если точка расположена на плоскости проекций, тогда одна из ее проекций лежит в этой же плоскости, а две другие – на осях проекций.

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

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

Построение проекций точки по ее координатам

Пусть заданы координаты какой-либо точки А (x, y, z ). Тогда ее проекции строят следующим образом: сначала откладывают абсциссу по оси ОХ ; затем проводят вертикальную линию; далее на ней откладывают ординату по оси OY и аппликату по оси OZ (вверх, либо вниз от оси ОХ в зависимости от знака координат y, z ). По оси OY получают горизонтальную проекцию А 1 , по оси OZ - фронтальную А 2 . Профильную проекцию А 3 строят по А 1 и А 2 (либо по координатам). Например, построим проекции точки А (10, 20, 30), заданной конкретными координатами. Построения показаны на рис. 1.4.

Необходимо помнить, что положение горизонтальной проекции определяется координатами х и y , фронтальной проекции - координатами х и z , профильной проекции - координатами y и z . Ордината y всегда характеризует положение горизонтальной проекции, а аппликата – фронтальной.

Рис. 1.4. Взаимосвязь координат точки и ее проекций:

а) вид в аксонометрии; б) комплексный чертеж.

Исходя из тех же положений, решается обратная задача – определение координат точки по ее проекциям. Если на комплексном чертеже изображены проекции точки, тогда, измерив соответствующие расстояния, определяем ее координаты (см. рис. 1.4, б). Причем для определения всех трех координат достаточно двух проекций, т.к. любая пара проекций однозначно задается тремя координатами.

Удаленность точки от плоскостей проекций

Расстояние точки от какой-либо плоскости проекций определяет положение соответствующих проекций, а именно: расстояние до П 1 характеризует положение фронтальной проекции, расстояние до П 2 – горизонтальной проекции, расстояние до П 3 – и горизонтальной и фронтальной проекций. Так, если известно, что точка А удалена от П 1 на 30 мм, тогда ее фронтальная проекция А 2 удалена от оси ОХ на 30 мм; если задано, что точка А удалена от П 3 на 10 мм, тогда А 1 и А 2 удалены от осей OZ и OY соответственно на это расстояние (рис. 1.5).

Я боюсь, что не знаком с библиотеками, которые вы используете, но я думаю, что у меня есть разумная идея для алгоритма, который вы могли бы использовать, и я просто займусь тем, как я буду реализовывать это с помощью vanilla python, а затем Я уверен, что вы можете улучшить его и реализовать с помощью этих библиотек. Кроме того, я не утверждаю, что это лучший способ добиться этого, но я хотел получить ответ в разумной степени, так что вот здесь.

Теперь идея исходит из использования кросс-произведения двух векторов в алгоритмах для нахождения выпуклого множества множества точек, например. Graham Scan . Скажем, мы имеем две точки p1 и p2, которые определяют точечные векторы p1 и p2 , начиная с начала (0,0) до (x1, y1) и (x2, y2) соответственно. Перекрестное произведение p1 x p2 дает третий вектор p3 , который перпендикулярен как p1 , так и p2 и имеет величину, заданную площадью параллелограмма, ограниченного векторами.

Очень полезный результат состоит в том, что определитель матрицы

/ x1, x2 \ \ y1, y2 /

Который является x1 * y2 - x2 * y1, дает величину вектора p3 , а знак указывает, является ли p3 "выходящим" из плоскости или "входить" в него. Ключевым моментом здесь является то, что если эта величина положительная, то p2 находится "слева" от p1 , а если она отрицательная, то p2 вправо " p1 .

Надеюсь, этот пример искусства ascii поможет:

P2(4, 5) / / / /_ _ _ _ _. p1(5, 0)

x1 * y2 - x2 * y1 = 5 * 4 - 0 * 5 = 20, и поэтому p2 находится "слева" от p1

Наконец, почему это полезно для нас! Если у нас есть список вершин многоугольника и множество других точек графа, то для каждого ребра многоугольника мы можем получить вектор этого ребра. Мы также можем получить векторы, соединяющие стартовую вершину со всеми остальными точками графа и путем проверки того, лежат ли они слева или справа от края, мы можем исключить некоторые точки для каждого ребра. Все те, которые не удалены в конце процесса, это те точки внутри многоугольника. Во всяком случае, на какой-то код, чтобы сделать это более понятным!

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

poly = [(1, 1), (4, 2), (5, 5), (3, 8), (0, 4)]

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

points = set(["(3, 0), (10, -2), (3,3), ...])

Основной бит самого кода на самом деле довольно компактен для того, как долго мне приходилось писать о том, как он работает. to_right принимает два кортежа, представляющих векторы, и возвращает True , если v2 лежит справа от v1 . Затем петли проходят через все края многоугольника и удаляют точки из рабочего набора, если они находятся справа от любого из ребер.

Def to_right(v1, v2): return (v1*v2 - v1*v2) < 0 for i in range(len(poly)): v1 = poly v2 = poly[i] for p in points: if(to_right(v2-v1, p-v1)): points.remove(p)

edit: Чтобы прояснить, тот факт, что они удалены, если они справа, а не слева, связаны с порядком, в котором указаны вершины многоугольника. Если бы они были в порядке по часовой стрелке, вам нужно было бы исключить левые точки вместо этого. На данный момент у меня нет особого решения этой проблемы.

В любом случае, надеюсь, что я прав по этому поводу, и это может помочь кому-то, даже если не OP. Асимптотическая сложность этого алгоритма равна O (mn), где n - количество точек в графе, а m - количество вершин многоугольника, так как в худшем случае все точки лежат внутри многоугольника, и мы должны проверять каждую точку для каждого ребра, при этом никто не удаляется.