Plot a quadrilateral having 8 points (each side passes through two points)

14 visualizaciones (últimos 30 días)
I have 8 points and need to plot a quadrilateral using those. Each side of it passes through two of these points, which are defined. How can I plot such a shape?
  4 comentarios
Mohammad Javad Asgari Pirbalouti
Mohammad Javad Asgari Pirbalouti el 18 de Abr. de 2023
Editada: Mohammad Javad Asgari Pirbalouti el 18 de Abr. de 2023
@DGM Thanks for the comment, these are not random points. These ment to show the deviation of a known square, so the order of connceting the dots is defined in a way that maches the refernce square. I was looking for an easier solution rather than solving 4 equations for 8 squares to plot it with matlab:-/.
John D'Errico
John D'Errico el 19 de Abr. de 2023
I will guess (from the vague things you have said) that you have 8 points, so pairs of two points define one side of the quadrilateral. But the points are no on a vertex. So you are hoping to find where the lines INTERSECT, and that defines the quadrilaterl? This is just a complete guess from what you have said. But you did mention having to solve equations, and that is the only thing that makes sense.

Iniciar sesión para comentar.

Respuesta aceptada

Mohammad Javad Asgari Pirbalouti
Mohammad Javad Asgari Pirbalouti el 19 de Abr. de 2023
x = [10.0001 10 30 70 90 90.1 30 70];
y = [-45 -65 -25 -25.1 -45 -65 -105 -105.1];
[cornerX, cornerY] = cornerFinder(x,y);
plot(cornerX,cornerY,'r', 'LineWidth',2)
function [cornerX, cornerY] = cornerFinder(x,y)
% Pre-allocate memory for a and b arrays
a = zeros(1,4);
b = zeros(1,4);
% Compute slopes and y-intercepts using array indexing
for i = 1:2:8
j = (i+1)/2;
a(j) = (y(i+1)-y(i))/(x(i+1)-x(i));
b(j) = y(i)-a(j)*x(i);
end
% Pre-allocate memory for cornerX and cornerY arrays
cornerX = zeros(1,4);
cornerY = zeros(1,4);
syms xx yy
% Compute corner points using array indexing
for i = 1:4
if i == 4
j = 1;
else
j = i+1;
end
sol = solve(a(i)*xx + b(i) - yy, a(j)*xx + b(j) - yy);
cornerX(i) = double(sol.xx);
cornerY(i) = double(sol.yy);
end
% Append the first corner point to the end of arrays
cornerX = [cornerX, cornerX(1)];
cornerY = [cornerY, cornerY(1)];
end

Más respuestas (1)

Torsten
Torsten el 18 de Abr. de 2023
Editada: Torsten el 19 de Abr. de 2023
P1 = [0 0 0];
P2 = [1 0 0];
P3 = [0 1 0];
P4 = [0 0 1];
P5 = [1 1 0];
P6 = [0 1 1];
P7 = [1 0 1];
P8 = [1 1 1];
hold on
plot3([P1(1),P2(1)],[P1(2),P2(2)],[P1(3),P2(3)],'b')
plot3([P1(1),P3(1)],[P1(2),P3(2)],[P1(3),P3(3)],'b')
plot3([P1(1),P4(1)],[P1(2),P4(2)],[P1(3),P4(3)],'b')
plot3([P2(1),P5(1)],[P2(2),P5(2)],[P2(3),P5(3)],'b')
plot3([P2(1),P7(1)],[P2(2),P7(2)],[P2(3),P7(3)],'b')
plot3([P3(1),P5(1)],[P3(2),P5(2)],[P3(3),P5(3)],'b')
plot3([P3(1),P6(1)],[P3(2),P6(2)],[P3(3),P6(3)],'b')
plot3([P4(1),P6(1)],[P4(2),P6(2)],[P4(3),P6(3)],'b')
plot3([P4(1),P7(1)],[P4(2),P7(2)],[P4(3),P7(3)],'b')
plot3([P5(1),P8(1)],[P5(2),P8(2)],[P5(3),P8(3)],'b')
plot3([P6(1),P8(1)],[P6(2),P8(2)],[P6(3),P8(3)],'b')
plot3([P7(1),P8(1)],[P7(2),P8(2)],[P7(3),P8(3)],'b')
hold off
view([45 45])
If your quadrilateral is 2d, use "plot" instead of "plot3" in a similar way.

Categorías

Más información sobre Annotations en Help Center y File Exchange.

Productos


Versión

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by