Mathcad: попадание точки в область и уравнение прямой по 2 точкам :)
Представим, что нам нужна функция, умеющая отличать ситуацию, когда точка на плоскости попадает в одну или несколько областей, описанных некими соотношениями, от ситуации, когда точка в области не попадает. Эта область может быть, например, такой (закрашена на рисунке):
написать функцию Mathcad, определяющую попадание точки на плоскости в некоторую область
Расчёт может зависеть от одного или нескольких дополнительных параметров (в нашем случае это значение R
), которые можно передать как дополнительные аргументы функции или просто определить как переменные.
Задачу будет решать функция F(x,y)
следующего вида:
F(x,y):=if(0≤x≤2⋅Rʌ0≤y≤2⋅Rʌx2+y2≥R2vx≤0ʌy≤0ʌy≥a⋅x+b,1,0)
Откуда она взялась?
Так как нас интересует только факт попадания или непопадания точки с координатами (x,y)
в область, общий шаблон функции будет иметь вид
F(x,y):=if(условие,1,0)
то есть, при истинном условии возвращается 1, а при ложном 0. Осталось написать условие. Непересекающихся областей на рисунке две, конкретная точка может попадать только в одну из них, поэтому условие имеет общий вид
область1vобласть2
, где операция логического "или" (or), обозначаемая в Mathcad символом "v", вводится соответствующей кнопкой панели инструментов Boolean (Логический), там же, кстати, находятся и остальные значки отношений, такие как ≤, ≥ и т.п.
Примем за область1
квадрат со стороной 2⋅R
, из которого вырезана четвертушка окружности. Попадание точки в "чистый" квадрат можно записать условием
0≤x≤2⋅Rʌ0≤y≤2⋅R
Существенно, что ограничения на координаты x
и y
точек, образующих квадрат, должны выполняться одновременно, поэтому они объединены операцией логического "и" (and), которая в Mathcad обозначается "ʌ" и вводится с той же панели Boolean. Точка, попадающая в квадрат, не должна при этом лежать внутри окружности радиуса R
с центром в начале координат, учтём это дополнительным условием
x2+y2≥R2
которое свяжем той же операцией "ʌ" с остальными двумя ограничениями.
Теперь разберёмся с областью 2. Отсечь третью координатную четверть, в которой находится наша треугольная область, легко условием вида x≤0ʌy≤0
, а чтобы получить условие, записанное в форме y≥a⋅x+b
, нужно вывести уравнение прямой y=a⋅x+b
, то есть, найти коэффициенты a, b
прямой, проходящей через точки с координатами (-2⋅R,0)
, (0,-2⋅R)
. Тогда все точки, отвечающие условию y=a⋅x+b
, будут лежать на прямой, условие y<a⋅x+b
описывает полуплоскость ниже прямой, а y>a⋅x+b
- выше. Мы везде ставим знаки ≤и ≥ вместо < и >, так как включаем в отсекаемые области их границы.
Как в Mathcad найти уравнение прямой, проходящей через 2 точки? Способов, по крайней мере, два.
1. Занести координаты x
, y
двух точек в соответствующие векторы, затем вызвать стандартную функцию slope
("наклон") для вычисления коэффициента a
, а функцию intercept
("отсечка") для получения коэффициента b
:
вычисление коэффициентов прямой, проходящей через 2 точки, стандартными функциями Mathcad
Здесь для удобства введена нумерация элементов векторов с единицы вместо принятого по умолчанию нуля (оператор ORIGIN:=1
). Обратите внимание, что x-координаты точек указаны в векторе x
, а y-координаты - в векторе y
.
2. Почитать всё вручную. Так как прямая проходит через две заданные точки с координатами (x1,y1)
и (x2,y2)
, имеем систему двух уравнений с двумя неизвестными, решаемую относительно неизвестных a, b
:
a*x1+b=y1 a*x2+b=y2
Вычитая из второго уравнение первое, получаем
a = (y2-y1)/(x2-x1)
после чего находим b=y1-a*x1
или y2-a*x2
. Это работает при любых x1≠x2
, а если x1=x2
, то уравнение прямой превращается просто в x=const
.
"ручное" вычисление в Mathcad коэффициентов прямой, проходящей через 2 точки
Наконец, такую область легко изобразить на контурной диаграмме (верхнее меню Insert - Graph - Contour plot или Вставка - График - Контурный).
Просто подготовим таблицу значений функции F(x,y)
с помощью стандартного метода CreateMesh
и вставим диаграмму:
графическое изображение области на плоскости с помощью контурной диаграммы в Mathcad
Скачать архив .zip с этим документом .xmcd Mathcad 14/15 (17 Кб)
Если мы хотим хранить координаты каждой точки в своём отдельном векторе из 2 элементов, работу с функциями придётся изменить, кроме того, есть отдельная функция line
, чтобы посчитать сразу два коэффициента прямой, проходящей через две точки (первый коэффициент будет означать значение intercept
, а второй slope
). Пример показан на рисунке ниже.
Уравнение прямой по 2 точкам функцией line, точки заданы отдельными векторами
26.03.2017, 17:12 [8658 просмотров]