Я работаю над проектом в Matlab
и мне нужно найти площадь между двумя линиями внутри квадрата [-1,+1]x[-1,+1]
, пересекающимися в точке (xIntersection,yIntersection)
. Итак, идея состоит в том, чтобы вычесть две строки и проинтегрировать между [-1, xIntersection] и [xIntersection, +1], просуммировать результаты и, если они отрицательные, изменить знак.
Подробнее о том, как найти пересечение двух линий, можно узнать по этой ссылке.
Я использую функцию Matlab's
integral()
, вот фрагмент моего кода :
xIntersection = ((x_1 * y_2 - y_1 * x_2) * (x_3 - x_4) - (x_1 - x_2) * (x_3 * y_4 - y_3 * x_4) ) / ((x_1 - x_2) * (y_3 - y_4) - (y_1 - y_2) * (x_3 - x_4));
d = @(x) g(x) - f(x);
result = integral(d, -1, xIntersection) - int( d, xIntersection, 1)
if(result < 0),
result = result * -1;
end
Обратите внимание, что я определил ранее в коде g(x)
и f(x)
, но не сообщил об этом во фрагменте.
Проблема в том, что вскоре я понял, что линии могут пересекаться как внутри, так и снаружи квадрата, более того, они могут пересекать квадрат с любой его стороны, и количество возможных комбинаций очень быстро растет.
I.e.:
Это всего 4 случая, но учитывая, что f(+1), f(-1), g(+1), g(-1) могут находиться внутри интервала [-1,+1], над ним или под ним и что пересечение может быть внутри или снаружи квадрата, общее число равно 3 * 3 * 3 * 3 * 2 = 162.
Очевидно, что в каждом случае явная функция для интеграции, чтобы получить область между двумя линиями, отличается, но я не могу думать о написании случая переключения для каждого из них.
Есть идеи?