2015-06-27 1 views
1

У меня есть пара данных x0 и y0, что соответствует кривой. Он содержит 8 баллов, например: K(x0(2),y0(2)).Нарисуйте кривую правильно, используя Matlab?

Проблема заключается в том, что, когда я сюжет x0 и y0 вроде этого:

plot(x0,y0,'c*'); 
plot(x0,y0,'k'); 

Я получаю точку голубого цвета в хорошем месте, но кривая беспорядок. Проверьте скриншот:

enter image description here

Могу ли я сделать какие-то Sorting?

Этот вопрос кажется простым, но я новичок.

ответ

3

Поскольку точки определяют выпуклый многоугольник, вы можете просто использовать функцию convhull для этого. convhull возвращает индексы самых внешних точек в x0 и y0. По этому вопросу мы используем, что они расположены против часовой стрелки вокруг корпуса, так что вы можете их хорошо рисовать.

h = convhull(x0,y0); 
plot(x0(h),y0(h),'k'); 

Результат выглядит следующим образом:

result

Точки, используемые для получения выходного сигнала:

x0 = [1 2 3 4 4 3 2 1]; 
y0 = [2 3 0 2 1 3 0 1]; 
+1

Очень приятно. +1 ... почти у 1 тыс. Репутации ... и ты был с нами всего несколько дней! Кстати, вы, вероятно, должны упомянуть, что возвращенные индексы гарантированно находятся в порядке против часовой стрелки относительно полигона ... вот как вы можете получить рисунок графика красиво. Форма пересечения, которая находится в комментарии OP, уже является представителем самых внешних точек изображенного многоугольника. – rayryeng

+1

@rayryeng Спасибо :) Да, сегодня это будет 1к. Но ближайшие дни не будут такими активными, поскольку исследования требуют повторения перед экзаменами ... Конечно, я упомянул об этом в своем ответе. – Matt

+0

А я вижу! Я закончил около 2 лет назад .... и я определенно никогда не вернусь! лол. Удачи вам в экзаменах! – rayryeng

0

Если у вас есть Mapping Toolbox функция poly2ccw также выполняет работа для вас. Convex Hull - более универсальный алгоритм для обработки любого выпуклого многоугольника. Если у вас уже есть конечности вашей фигуры, вы можете просто использовать переопределенные координаты poly2ccw, которые позволят вам нарисовать периметр формы в порядке против часовой стрелки.

В частности, вы бы просто сделать это:

[x1, y1] = poly2ccw(x0, y0); 

x1 и y1 будет содержать перемешиваются точки x0 и y0, так что теперь они в порядке обхода против часовой стрелки. Затем вы можете нарисовать их через:

plot(x1, y1, 'k');