2016-07-20 2 views
0

У меня есть набор данных интенсивности дальнего поля (для применения светодиодов/фотоников), и я пытаюсь построить их через полярное преобразование.MATLAB Преобразование построения

Ниже приведено то, что у меня есть: 2D-массив значений интенсивности, каждая строка соответствует определенному значению phi, которое находится в диапазоне от 0 до 360 с шагом 2; каждый столбец соответствует конкретной тете, которая находится на интервале от 0 до 90 с шагом 2. Это приводит к созданию массива 2D-интенсивности с размером 181 на 46.

Если я вручную генерирую значения phi и theta с использованием linspace, I могут изображать их со значениями x, являющимися значениями theta, y, являющимися phi, и интенсивность будет представлена ​​его цветом, который я успешно сделал уже, поскольку это довольно просто, используя pcolor в MATLAB

Чтобы сгенерировать однако график интенсивности полярного дальнего поля, однако, ось х должна быть тета/90 * cos (phi), ось y должна быть тета/90 * sin (phi) с цветом, представляющим интенсивность еще раз.

Я создал трехмерный массив размером 181x46x3, который хранит рассчитанные значения x и y и значение интенсивности для каждой тета и phi. Однако я больше не могу их использовать, используя pcolor, поскольку они уже не в единых шагах, и они не сортируются в любом случае.

Любые идеи относительно того, как их построить?

Заранее спасибо.

ответ

0

В зависимости от того, что вы хотите сделать, у вас есть 2 варианта, вы можете разбросать свои очки, или вы можете интерполировать их в сетку.Например:

c=peaks(181); 
c=c(1:181,1:46); 
[th,phi]=meshgrid(0:2:90,0:2:360); 

Создает образец данных с формой, похожими на то, что вы упоминаете

с использованием pcolor в

h=pcolor(th,phi,c); 
set(h,'edgecolor','none') 

Вы получаете:

enter image description here

Теперь вам может получить координаты x и y как:

x=(th./90).*cosd(phi); 
y=(th./90).*sind(phi); 

Первый вариант: Scatter

Вы можете непосредственно построить это как

scatter(x(:),y(:),30,c(:),'fill') 

enter image description here

Pros:

  • Точные координаты

Против:

  • прерывистого сюжет, видимый при зумирования

Второй вариант: Интерполируйте

Вы можете использовать griddata интерполировать эти координаты в квадрат сетку для ее построения с использованием pcolor

[xv,yv]=meshgrid(-1:0.01:1); 
cv=griddata(x,y,c,xv,yv); 

h=pcolor(xv,yv,cv); 
set(h,'edgecolor','none') 

enter image description here

Плюсы:

  • Continous участок

Минусы:

    не
  • точные значения, особенно близко к центру, где точки находятся очень близко к друг другу
+0

Второй способ работал очень хорошо, спасибо вам большое за помощь! – Henry

+0

@Henry Glad Я мог бы помочь, пожалуйста, отметьте свой вопрос, как ответили, поэтому его можно закрыть –

Смежные вопросы