2017-05-29 149 views
0

我想显示一个矩形,它的中心位于(x,y)位置,其长轴与x轴成角度φ。我怎样才能做到这一点?使用散点图显示指定方向的矩形

我可以

scatter(x,y) 

显示位置(X,Y)的圆形点,但我不知道该矩形的想法。

回答

1

使用fill从其xy坐标绘制2D多边形。

c = [0, 0];  % Position of centre 
h = 5; w = 8; % height and width of rectangle 
a = deg2rad(30); % angle of rotation in radians (using deg2rad so can be set in degrees) 
% Get corners of rectangle 
corners = [c(1) + w/2, c(2) + h/2; c(1) + w/2, c(2) - h/2; c(1) - w/2, c(2) - h/2; c(1) - w/2, c(2) + h/2]; 
% rotate corner points 
corners = [(corners(:,1)-c(1))*cos(a) - (corners(:,2)-c(2))*sin(a) + c(1), (corners(:,1)-c(1))*sin(a) + (corners(:,2)-c(2))*cos(a) + c(2)]; 
% Use 'fill' or 'patch' to plot 
fill(corners(:,1), corners(:,2), 'r') 

这可以被包装成一个功能,如果你想重新使用它

function [corners(:,1), corners(:,2)] = getRectangle(c, h, w, a) 
% This function returns the corner points for a rectangle, specified 
% by its centre point c = [x,y], height h, width w and angle in degrees from horizontal a 
    a = deg2rad(a); 
    corners = [c(1) + w/2, c(2) + h/2; c(1) + w/2, c(2) - h/2; c(1) - w/2, c(2) - h/2; c(1) - w/2, c(2) + h/2]; 
    corners = [(corners(:,1)-c(1))*cos(a) - (corners(:,2)-c(2))*sin(a) + c(1), (corners(:,1)-c(1))*sin(a) + (corners(:,2)-c(2))*cos(a) + c(2)]; 
end 

用途:

[rectX, rectY] = getRectangle([0,0], 5, 8, 30); 
fill(rectX, rectY, 'r'); 
+0

我想用散射如何大量数据,而不是情节! –

+0

使用散射函数时,您只需要矩形点而不是圆形?这与矩形与x轴的角度有什么关系?只需将'scatter(x,y,'d')'或'scatter(x,y,'s')放在正方形中就可以散开。 – Wolfie

+0

使用散射函数时,您只需要矩形点而不是圆形?对,就是这样。这与矩形与x轴的角度有什么关系?这是我问的问题。 –