Как соединить две точки с помощью волнистой линии в MATLAB

#matlab

#matlab

Вопрос:

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

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

Спасибо!

Ответ №1:

Как сказал @Nzbuu, трудно понять, как должна выглядеть ваша волнистая линия. Следующая функция построит синусоиду на вашей текущей фигуре между 2 точками с указанными периодами и амплитудой. Если ваше определение волнистости отличается от моего, просто измените 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
  

Ответ №2:

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

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

Ответ №3:

Похоже, вам нужна подгонка по степенным рядам — по крайней мере, я предполагаю, что под «волнистой» линией вы подразумеваете что-то вроде квадратичной, кубической или etc подгонки.

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

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

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