При определении точек в пределах полигонов с использованием функцииMATLAB, результаты поиска верны для полигонов, нарисованных на линейных осях, но только приблизительно для полигонов, нарисованных на осях логарифмической шкалы. Хотя мои подозрения опираются на ошибку MATLAB, возможно, я что-то упустил.impoly только приблизительно правильно на осях логарифмической шкалы
Следующий код воспроизводит проблему, с которой я столкнулся с другими данными. Результаты показаны на следующем изображении (нижний набор панелей - увеличенные виды верхних панелей). Можно понять, что в полигоне есть немаркированные точки и помеченные точки вне полигона, ни один из которых не должен происходить, в случае многоугольника, нарисованного на осях логарифмической шкалы (справа). Напротив, полигонный тест является точным для полигонов, нарисованных на линейных осях (слева).
n=2E4;
x(:,1)=rand(n,1); y(:,1)=rand(n,1);
x(:,2)=lognrnd(0.5,0.25,n,1); y(:,2)=lognrnd(0.5,0.25,n,1);
for m=1:2
subplot(1,2,m);
scatter(x(:,m),y(:,m),'.'); hold on;
if(m==2)
set(gca,'xscale','log'); set(gca,'yscale','log');
end
p=impoly(gca);
pc=getPosition(p);
in=inpolygon(x(:,m),y(:,m),pc(:,1),pc(:,2));
scatter(x(in,m),y(in,m),20);
end
О, это хорошее наблюдение! Я полностью ее не замечал. Когда я запускаю ваш код (на R2014b), полигоны не накладываются. Многоугольник, нарисованный в линейном пространстве, копируется в лог-пространство, но поскольку оси различны, он заканчивается в левом нижнем углу осей логарифма. – user001
@ user001, какие полигоны не накладываются? Я имею в виду, что вся суть кода показывает, что они не на втором рисунке, потому что это пробел. Я сделал код и график в 2014b –
@ user001 У меня была ошибка, см. Отредактированный код –