2013-08-16 8 views
1

code rectangle d'angle simple arrondi Matlab peut être écrit comme suit.rectangle d'angle Arrondi représentation des coordonnées

rectangle('Position',[0,-1.37/2,3.75,1.37],... 
     'Curvature',[1],... 
    'LineWidth',1,'LineStyle','-') 
daspect([1,1,1]) 

Comment obtenir les tableaux de coordonnées x et y de cette figure?

+0

Vous devez clarifier votre question; les coordonnées x et y du rectangle ont été données par vous dans la commande 'rectangle'? Ou demandez-vous quelque chose d'autre? – jazzbassrob

+0

En voyant le texte d'aide de la fonction 'rectangle', je suis tombé sur la phrase qui dit" L'objet RECTANGLE ne rendra pas aux axes Voir les angles autres que [0 90] ". Cela m'amène à croire qu'il utilise une sorte de rendu spécial, pas d'intrigue. Donc, vous ne pouvez probablement pas obtenir les coordonnées x et y. – radarhead

+0

Je dois obtenir deux ensembles de coordonnées, x et y, qui dessinent la même figure, c'est-à-dire les coordonnées de tous les points de ce rectangle de coin arrondi. – bordart

Répondre

1

Pour obtenir les axes des limites des unités, font:

axisUnits = axis(axesHandle) % axesHandle could be gca 

axisUnits sera un tableau de quatre éléments, avec la syntaxe suivante: [xlowlim xhighlim ylowlim yhighlim], il contiendra aussi le ZLow et zhigh pour les parcelles 3-D.

Mais je pense que ce n'est pas ce que vous devez savoir. Vérification de la documentation Matlab pour le rectangle properties, nous trouvons:

Position vecteur à quatre éléments [x, y, largeur, hauteur]

Emplacement et taille du rectangle. Indique l'emplacement et la taille du rectangle dans les unités de données des axes. Le point défini par x, y spécifie un coin du rectangle et la largeur et la hauteur de la taille définie dans unités le long des axes x et y des axes respectivement.

Il est également documentée sur le rectangle documentation:

rectangle

('position', [x, y, w, h]) dessine le rectangle à partir du point x, y et ayant une largeur de w et une hauteur de h. Spécifier des valeurs de données axes unités.

Voir si cela illustre ce que vous voulez. Vous avez un axe x qui va de -100 à 100 et un axe y qui va de 5 à 15. Supposons que vous vouliez mettre un rectangle de -30 à -20 en x et de 8 à 10 en y.

rectangle('Position',[-30,8,10,2]); 
+0

Merci pour vos efforts, mais je n'ai toujours aucune idée, comment dériver les coordonnées des points de cette figure. Il n'y a probablement pas de moyen facile de mettre en œuvre cela et je dois trouver des solutions alternatives. Si j'ai raté quelque chose, je serais très reconnaissant si vous pouviez m'expliquer. – bordart

+0

@artalexan désolé, en fait j'ai mal compris la documentation matlab. Vous placez la position du rectangle directement dans les unités d'axes. Ajout d'un exemple, j'espère que vous réussirez à le faire fonctionner avec! – Werner

0

Comme expliqué par les commentaires, il semble y avoir aucun moyen direct d'interroger la figure créée par rectangle et extraire x/y. D'autre part, je peux penser à deux stratégies simples pour arriver à des coordonnées qui vont reproduire de près la courbe générée avec rectangle:

(1) Enregistrer la figure sous forme d'image (par exemple .png) et traiter l'image pour extraire points correspondant à la courbe. Un certain degré de massage est nécessaire, mais c'est relativement simple s'il est émoussé et je m'attends à ce que le code soit un peu lent à l'exécution par rapport à l'obtention de données à partir d'un objet axes.

(2) Écrivez votre propre code pour dessiner un rectangle avec des bords courbes. Tout en recréant exactement ce que matlab dessine peut ne pas être si simple, vous pouvez être satisfait de votre propre version. Que vous choisissiez l'une de ces approches se résume à (a) quelle vitesse d'exécution vous considérez acceptable (b) à quel point vous devez répliquer ce que rectangle dessine sur l'écran (c) si vous avez des routines de traitement d'image, disons pour lire un fichier image.

Modifier

Si vous avez la boîte à outils de traitement d'image, vous pouvez arriver à un ensemble de points représentant le rectangle comme suit:

h=rectangle('Position',[0,-1.37/2,3.75,1.37],... 
     'Curvature',[1],... 
    'LineWidth',1,'LineStyle','-') 
daspect([1,1,1]) 
axis off 
saveas(gca,'test.png'); 
im = imread('test.png'); 
im = rgb2gray(im); 
figure, imshow(im) 

Notez que vous aurez toujours besoin d'appliquer un seuil sélectionnez les points pertinents de l'image, puis transformez le système de coordonnées et réorganisez les points afin de les afficher correctement en tant qu'ensemble connecté. Vous voudrez probablement aussi bricoler avec la résolution du fichier image initial ou appliquer des fonctions de traitement d'image pour obtenir une courbe régulière.

+0

je vous remercie pour vos idées. Je vais probablement commencer par la première option, c'est-à-dire l'acquisition de données à partir d'une image. Pourriez-vous s'il vous plaît me suggérer un bon tutoriel ou script pour dériver des coordonnées de l'image? – bordart

Questions connexes