Matlab - пересечение многоугольников и линий - PullRequest
0 голосов
/ 03 июля 2018

На основе Matlab - Нарисуйте линии углов по кругу и получите точки пересечения

Я попробовал следующий код, который должен найти пересекающиеся точки и пометить их. К сожалению, это не работает. У вас есть идея, как я могу это решить?

Сценарий:

clc;
clear;
close all;

r=1000;

nCircle = 1000;

t = linspace(0,2*pi,nCircle);

xCircle = 0+ r*sin(t);  
yCircle = 0+ r*cos(t); 

pgon = polyshape(xCircle,yCircle ); 

line(xCircle,yCircle );

axis equal;
hold on;

nAngles = 45;
lineLength = r+50;


for angle = 0:nAngles:359
    xLine(1) = 0;
    yLine(1) = 0;
    xLine(2) = xLine(1) + lineLength * cosd(angle);
    yLine(2) = yLine(1) + lineLength * sind(angle);
    plot(xLine, yLine);
    lineseg = [xLine; yLine];
    intersectCoord = intersect(pgon,lineseg);
    scatter(intersectCoord(2,2),intersectCoord(1,2));
end 

Сценарий обновления проверяет только последнюю сгенерированную строку, но он по-прежнему не работает с пересечением:

clc;
clear;
close all;

r=1000;

nCircle = 1000;

t = linspace(0,2*pi,nCircle);

xCircle = 0+ r*sin(t);  
yCircle = 0+ r*cos(t); 

objectCircle =  rot90([xCircle; yCircle]);

line(xCircle,yCircle);

axis equal;
hold on;

nAngles = 35;
lineLength = r+5;

for angle = 0:nAngles:360
    disp(angle);
    xLine(1) = 0;
    yLine(1) = 0;
    xLine(2) = xLine(1) + lineLength * cosd(angle);
    yLine(2) = yLine(1) + lineLength * sind(angle);
    plot(xLine, yLine);
    lineseg = [xLine; yLine];

end

coefficients = polyfit([xLine(1), xLine(2)], [ yLine(1),  yLine(2)], 1);
a = coefficients (1);
b = coefficients (2);

for xLineCoord = 0:lineLength
    i=xLineCoord+1;
    yLineCoord=a*xLineCoord +b ;
    yLineCoordArray(i, :) = yLineCoord;
    xLineCoordArray(i, :) = i;
end 

objectLine = [xLineCoordArray, yLineCoordArray];
C = intersect(objectLine,objectCircle);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...