5

Tôi muốn tìm ma trận trọng lượng cho phương pháp tái tạo đại số. Đối với điều này tôi phải tìm đường giao nhau với lưới điện. tôi có thể tìm thấy đường giao nhau trực tiếp với dòng nhưng tôi phải lưu trữ số lượng đường lưới phân đoạn đường giao nhau một cách khôn ngoan. vì vậy giả sử nếu trong ô lưới hình vuông đầu tiên không giao nhau với lưới thì đặt 0 vào phần tử đầu tiên của ma trận trọng số. đây mã mà tôi đã cố gắng cho ngã tư đường:Cách lấy phân đoạn đường giao nhau hình chữ nhật trong MATLAB

ak = 3:6 
aka = 3:6 
x = zeros(size(aka)) 
y = zeros(size(ak)) 
for k = 1:length(ak) 
    line([ak(1) ak(end)], [aka(k) aka(k)],'color','r') 
end 

% Vertical grid 
for k = 1:length(aka) 
    line([ak(k) ak(k)], [aka(1) aka(end)],'color','r') 
end 
hold on; 
X =[0 15.5] 
Y = [2.5 8.5] 
m = (Y(2)-Y(1))/(X(2)-X(1)) ; 
c = 2.5 ; 
plot(X,Y) 
axis([0 10 0 10]) 
axis square 
% plotting y intercept 
for i = 1:4 
    y(i) = m * ak(i) + c 
    if y(i)<2 || y(i)>6 
     y(i) = 0 
    end 
end 
% plotting x intercept 
for i = 1:4 
    x(i) = (y(i) - c)/m 
    if x(i)<2 || x(i)>6 
     x(i) = 0 
    end 
end 
z = [x' y'] 

Giải thích về vấn đề:

Tôi có một dòng, xác định bởi các thông số m, h, nơi y = m*x + h dòng này đi qua một mạng lưới (tức pixel). Đối với mỗi ô vuông (a, b) của lưới (ví dụ: hình vuông [a, a+1]x[b, b+1]), tôi muốn xác định nếu dòng đã cho đi qua hình vuông này hay không, và nếu có thì chiều dài của đoạn là trong hình vuông. Để tôi có thể xây dựng ma trận trọng lượng cần thiết cho phương pháp tái tạo đại số.

+0

Tôi không biết bạn muốn trợ giúp điều gì. Mã của bạn đang vẽ một đường thẳng và một lưới có lưới 1 từ 3 đến 6. Trả về giá trị y ở 3,4,5 và 6. Bạn muốn kết quả cuối cùng là gì và vấn đề chính xác là gì? –

+1

@TheMinion Tôi có một dòng, được xác định bởi các tham số m, h, trong đó y = m * x + h Đường này đi qua một mạng lưới (ví dụ: pixel). Đối với mỗi ô vuông (a, b) của lưới (nghĩa là hình vuông [a, a + 1] x [b, b + 1]), tôi muốn xác định xem đường đã cho có vượt qua ô vuông này hay không, và nếu có, chiều dài của phân đoạn trong hình vuông là bao nhiêu. Vì vậy mà tôi có thể xây dựng ma trận trọng lượng cần thiết cho phương pháp tái tạo đại số. –

+0

@ParthPatel Cân nhắc việc thay đổi tiêu đề của câu hỏi thành "Cách lấy đoạn giao cắt hình chữ nhật dòng trong MATLAB". Tôi đã trả lời câu hỏi của bạn dưới đây và đưa ra một ví dụ về cách thực hiện nó. – DontCareBear

Trả lời

1

Đây là một cách tốt đẹp để cắt một phù hợp với mạng lưới các hình chữ nhật và nhận được độ dài của mỗi phân đoạn giao lộ: Tôi đã từng ngã tư đường dòng từ mã giả trong câu trả lời thứ ba từ này link

% create some line form the equation y=mx+h 
m = 0.5; h = 0.2; 
x = -2:0.01:2; 
y = m*x+h; 
% create a grid on the range [-1,1] 
[X,Y] = meshgrid(linspace(-1,1,10),linspace(-1,1,10)); 
% create a quad mesh on this range 
fvc = surf2patch(X,Y,zeros(size(X))); 
% extract topology 
v = fvc.vertices(:,[1,2]); 
f = fvc.faces; 
% plot the grid and the line 
patch(fvc,'EdgeColor','g','FaceColor','w'); hold on; 
plot(x,y); 
% use line line intersection from the link 
DC = [f(:,[1,2]);f(:,[2,3]);f(:,[3,4]);f(:,[4,1])]; 
D = v(DC(:,1),:); 
C = v(DC(:,2),:); 
A = repmat([x(1),y(1)],size(DC,1),1); 
B = repmat([x(end),y(end)],size(DC,1),1); 
E = A-B; 
F = D-C; 
P = [-E(:,2),E(:,1)]; 
h = dot(A-C,P,2)./dot(F,P,2); 
% calc intersections 
idx = (0<=h & h<=1); 
intersections = C(idx,:)+F(idx,:).*repmat(h(idx),1,2); 
intersections = uniquetol(intersections,1e-8,'ByRows',true); 
% sort by x axis values 
[~,ii] = sort(intersections(:,1)); 
intersections = intersections(ii,:); 
scatter(intersections(:,1),intersections(:,2)); 
% get segments lengths 
directions = diff(intersections); 
lengths = sqrt(sum(directions.^2,2)); 
directions = directions./repmat(sqrt(sum(directions.^2,2)),1,2); 
directions = directions.*repmat(lengths,1,2); 
quiver(intersections(1:end-1,1),intersections(1:end-1,2),directions(:,1),directions(:,2),'AutoScale','off','Color','k'); 

Đây là kết quả (độ dài của các mũi tên trong hình ảnh có độ dài đoạn) enter image description here

Các vấn đề liên quan