нарисовать линию с уравнением в Matlab - PullRequest
0 голосов
/ 22 мая 2018

этот код делает круг с радиусом r.Возможно ли, изменив уравнение окружности на уравнение линии, создать линию с определенными углами и длинами?Если это возможно, каким должно быть уравнение?пожалуйста, руководство.

clc;clear;
mask = zeros(400,600);
position = [200,300];
r = 50;
cx = position(1);
cy = position(2);
[ix,iy] = size(mask);
[x,y]= meshgrid(-(cx-1):(ix-cx),-(cy-1):(iy-cy));
circlemask =((x.^2+y.^2)<=r^2)';

1 Ответ

0 голосов
/ 22 мая 2018

Вы можете следовать следующим образом:

Сначала обратитесь по этой ссылке , чтобы понять, как получить один конец прямой линии с заданным уклоном и один конец линии.

Во-вторых, код должен найти некоторые точки пересечения, для которых я использовал функцию обмена файлами MATLAB InterX из этой ссылки .

Проверьте код ниже:

mask = zeros(400,600);
% mesh grid for the zone 
[X,Y]= meshgrid(1:600,1:400) ;
L1 = [X(:) Y(:)] ;
% Given line details 
A = [200,300];   % one end of line 
th = 45 ;    % slope of line in degrees 
m = tand(th) ; % slope of the line 
d = 100 ;    % Length of the line we want 
% get the other end of line 
x = [A(1)+ d*sqrt(1/(1+m^2)) A(1)- d*sqrt(1/(1+m^2))] ;
y = [A(2)+ m*d*sqrt(1/(1+m^2)) A(2)- m*d*sqrt(1/(1+m^2))] ;
B =  [x(1) y(1)] ;
% Get nearest neighbors of points of the line in mask 
idx1 = knnsearch(L1,A) ;
idx2 = knnsearch(L1,B) ;
% Get intersection points 
L2 = [[A(1) x(1)]' [A(2) y(1)]']' ;  % take A and B points 
P = InterX(L1',L2) ;
idx = knnsearch(L1,P') ;
mask(idx) = 1 ;
imshow(mask)

Вывод кода выглядит следующим образом:

enter image description here

...