#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», вероятно, лучше ответит на ваш вопрос.