#matlab #ellipse
#matlab #эллипс
Вопрос:
Я определил единичный квадрат как область в коде matlab и создал эллипсы случайных размеров, все с центром в единичном квадрате.
Однако только потому, что они центрированы в единичном квадрате, не означает, что вся их площадь находится внутри единичного квадрата.
Я хочу учитывать только площадь внутри единичного квадрата, поэтому я рассчитал общую площадь каждого случайно сгенерированного эллипса, но я не уверен, как вычесть площадь, которая находится за пределами единичного квадрата.
Вот часть моего кода, которая создает эллипсы и вычисляет их площадь:
a = rand(16,1);
totarea = zeros(1,16);
for i = 1:4:16
ellipse(a(i)/2,a(i 1)/2,a(i 2),a(i 3))
totarea(i) = pi*a(i)*a(i 1)/4;
end
b = find(totarea > 0);
totarea = totarea(b);
Вот фотография того, что я сгенерировал:
Большой квадрат — это единичный квадрат. Внутри этого квадрата находится область, которая меня интересует. Как вы видите, генерируются эллипсы, которые перекрывают этот квадрат. Я хочу найти площадь каждого эллипса, который лежит внутри квадрата.
Приведенный выше код позволяет мне вычислить общую площадь каждого эллипса, но мне нужно вычесть площадь эллипсов, которая находится за пределами квадрата, и я не уверен, как написать код, который может это сделать.
Комментарии:
1. Не уверен, что вы имеете в виду. Не могли бы вы предоставить какой-нибудь рисунок / иллюстрацию (или ссылку на один) того, что вы пытаетесь сделать.
2. Я обновил публикацию, включив в нее рисунок с более подробным объяснением
3. Прежде всего, почему ваша функция
ellipse
ожидает четыре входа? обычно эллипс определяется двумя переменными… Тогда как вы определили «единичный квадрат»? Что вы могли бы сделать, чтобы получить площадь этих эллипсов: вы могли бы сказать, что каждый пиксель равен x см / мм / дюйм, какую бы единицу вы ни хотели использовать. Тогда вы могли бы просто вычислить количество пикселей, которые находятся внутри вашего эллипса и внутри вашего «единичного квадрата». Это не приведет к точной площади, но приведет к реалистичным данным. Ознакомьтесь с «Суммами Римана» .4. соответствующая ссылка: math.stackexchange.com/questions/261336 /…
Ответ №1:
Одним из способов приблизительного определения площади пересечения является дискретизация на единичной площади. Предположим, что каждый эллипс представлен четырьмя параметрами x0
, y0
, a
и b
такими, что
el( x0, y0, a, b ): ( (x-x0)/a )^2 ( (y-y0)/b )^2 <= 1
Теперь мы можем оценить
h = 1e-3; % discretization accuracy
[x y] = meshgrid( 0:h:1, 0:h:1 ); % discretizing the unit square
el = ( (x-x0)/a ).^2 ( (y-y0)/b ).^2 <= 1; % set all points of ellipse that are inside
intersect_area = sum( el(:) ) * h * h;
Чем меньше вы выбираете h
, тем точнее будет ваша оценка за счет потребления памяти и времени выполнения.
Комментарии:
1. 1. Вопрос, хотя. Почему вы
h
возводите в квадрат последнее суммирование? Почему бы просто не умножить? У меня есть идея, почему, но я не совсем уверен.2. @kkuilla
h^2
— это площадь одного пикселя без единичного квадрата.3. Большое вам спасибо! Это было именно то, что я искал! (: