2011-10-08 1 views

Répondre

0

Comme @Nzbuu a dit, il est difficile de savoir à quoi vous voulez que votre ligne ondulée ressemble. La fonction suivante va tracer une sinusoïde sur votre figure actuelle entre les 2 points, avec des périodes et des amplitudes spécifiées. Si votre définition d'ondulation est différente de la mienne, changez simplement xx et yy pour décrire votre ligne ondulée entre [0,0] et [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

Merci! C'est ce que j'avais en tête. – omarshammas

0

Il n'y a pas de fonctionnalité intégrée dans MATLAB pour cela. Vous devez écrire votre propre fonction pour le faire.

Il est difficile pour quelqu'un d'autre d'écrire quelque chose de générique, car cela dépend de ce que vous pensez que «ondulé» signifie et de la façon dont «ondulé» vous voulez qu'il soit.

0

On dirait que vous voulez un ajustement en série - au moins, je suppose par "ondulé" ligne, vous voulez dire quelque chose comme un ajustement quadratique ou cubique ou etc. C'est très bien, mais pour répondre aux besoins d'une série de puissance, vous avez besoin d'une contrainte de plus que la puissance à laquelle vous correspondez. Donc, si vous n'avez que deux points (ou un point et une pente), cela signifie que vous ne pouvez ajuster que x^1, ce qui est bien sûr un ajustement linéaire.

EDIT: Pour répondre à votre question, dans le cas où vous pouvez obtenir plus de contraintes, vous voulez probablement utiliser polyfit ou quelque chose de similaire. Googling pour "matlab polynomial fit" répondra probablement mieux à votre question.

Questions connexes