Как соединить две точки с помощью волнистой линии в MATLAB - PullRequest
0 голосов
/ 08 октября 2011

Как соединить две точки, такие как (1,1) и (2,2), используя волнистую линию вместо прямой в Matlab?

Я посмотрел на строку функций ([1 2], [1 2]), но она не обеспечивает такую ​​функциональность.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 08 октября 2011

Кажется, что вы хотите подгонку к степенной серии - по крайней мере, я предполагаю, что под "волнистой" линией вы подразумеваете что-то вроде подгонки квадратичной, кубической или т. Д.

Это хорошо, но для разумного подбора степенных рядов вам, по сути, нужно еще одно ограничение, чем сила, к которой вы подходите.

Итак, если у вас есть только две точки (или одна точка и уклон), это означает, что вы можете соответствовать только x^1, что, конечно, является линейным соответствием.

РЕДАКТИРОВАТЬ: Чтобы ответить на ваш вопрос, в случае, если вы можете получить больше ограничений, вы, вероятно, захотите использовать polyfit или что-то подобное. Поиск в Google для «полиномиальной подгонки по Matlab», вероятно, ответит на ваш вопрос лучше.

0 голосов
/ 09 октября 2011

Как сказал @Nzbuu, трудно понять, как должна выглядеть ваша волнистая линия.Следующая функция построит синусоиду на вашем текущем рисунке между двумя точками с указанием периодов и амплитуды.Если ваше определение волнистости отличается от моего, просто измените xx и yy, чтобы описать вашу волнистую линию между [0,0] и [1,1].

function wavyline(pt1, pt2) 
% first, create a "unit" wavy line segment
xx = [0:.01:1];
reps = 5 % how many periods of sine you want
widthRatio = 0.2 % height of peaks / lenght of line
yy = (widthRatio/2)*sin(reps*xx*2*pi);

% stretch our unit wavy line to be the proper length
dx = pt2(1) - pt1(1);
dy = pt2(2) - pt1(2);
len = sqrt(dx*dx+dy*dy);
xx = len*xx;

% now rotate it
th = atan2(dy, dx);
R = [cos(th), -sin(th); sin(th), cos(th)];
rotatedPts = R * [xx;yy];

% finally, shift it to start at pt1, and plot
shiftedPts = rotatedPts + [pt1(1); pt1(2)] * ones(size(xx));
plot(shiftedPts(1,:), shiftedPts(2,:),'k')

end
0 голосов
/ 08 октября 2011

В MATLAB нет встроенной функциональности для этого. Вы должны написать свою собственную функцию, чтобы сделать это.

Трудно кому-то другому написать что-то общее, потому что это зависит от того, что, по вашему мнению, означает «волнистый» и насколько «волнистым» вы хотите, чтобы оно было.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...