Matlab - como usar for para este problema?

 
Vista:
sin imagen de perfil

como usar for para este problema?

Publicado por Galo (4 intervenciones) el 08/08/2022 04:07:09
Buenas!

Quisiera algun consejo para desarrollar un script.
Tengo este poligono de un lago, el cual tiene coordenadas x e y. 1)Me piden calcular perfiles perpendiculares al contorno de este lago. 2) me sugieren usar un loop for que recorra cada punto del contorno del lago y que para cada punto "j" calcule un punto a 50 metros de "j", hacia afuera del lago, y que ademas esté sobre una linea que corte a la mitad el ángulo que existe entre los puntos "j-1","j"y "j+1".
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

como usar for para este problema?

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 09/08/2022 22:47:32
Buenas tardes.
1. Definir que son perfiles perpendiculares
2. Cómo se calculan los perfiles perpendiculares en forma analítica.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

como usar for para este problema?

Publicado por damian (22 intervenciones) el 10/08/2022 01:03:07
Hola. Suponiendo que tenes los datos de los puntos del lago como una matriz de dimensión nx2 (n filas y columna "x" e "y") te recomiendo primero definir en una variable la dimensión, por ej: a=size(MATRIZ) , esto te va a dar un vector donde el primer valor te indica las filas y el segundo valor te indica las columnas, así podes definir al "for" como: " for i = 1 : a(1) ". Yo generalmente cuando debo usar el valor sobre el que estoy parado con el for y un valor anterior, dejo al primer valor de los datos afuera del ciclo y al for lo arranco desde el segundo valor:
"for i = 2 : a(1) ". Esto para poder comenzar a hacer las comparaciones del valor actual y el valor anterior sin complicarme. No es complicado el ciclo, lo más trabajoso es la parte de trigonometría. Lo que yo haría es hacerlo primero a mano, usaría pitágoras y el teorema del coseno para determinar los puntos a 50m analíticamente. Usá tres puntos y trata de generalizarlo para el resto, también es probable que necesites usar un "if" para saber la pendiente de los vectores que se forman con los puntos de datos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

como usar for para este problema?

Publicado por Galo (4 intervenciones) el 10/08/2022 22:28:09
Hola, Muchas gracias por tu respuesta.
Si entiendo mas o menos el ciclo for. al comenzar a calcular los lados es cuando se me complica... si imaginamos un triangulo rectangulo entre P1 y P0, tengo que conozco uno de los lados (50 metros)...El segundo lado tendria que calcularlo entre la distancia de los puntos conocidos del lago P1(x1,y2) P2(x2,y2)?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

como usar for para este problema?

Publicado por damian (22 intervenciones) el 11/08/2022 01:39:48
Hola. Siguiendo tu primer consulta, dice que el punto a 50 metros hacia afuera debe estar sobre una línea que corte a la mitad el ángulo formado por los puntos j-1, j y j+1. Pasa alguna captura de la consigna completa o una foto porque sin entender qué es lo que se pide va a ser imposible. Yo entendí que el punto debe estar ubicado como en la imágen que te dejo acá abajo, donde la línea amarilla es sobre la que debe estar el punto. Si formas un ángulo rectángulo hacia afuera entre dos puntos consecutivos y que la hipotenusa sea los 50 metros no se va a cumplir que pase por la línea de corte del ángulo (amarilla del dibujo). Hace un dibujo o pasa algo para que podamos entender bien tu consigna. En todo caso, si tenes dos puntos, "A" y "B", el largo de cada lado del lago lo podes calcular como:
AB=sqrt( (Xa-Xb)^2 + (Ya-Yb)^2 ). Cualquier distancia entre dos puntos la calculas de esa manera. Y si necesitas conocer un ángulo que no sea rectángulo te recomiendo usar el T. del coseno para el cual primero vas a tener que calcular los 3 lados con la ecuación que te dejé arriba.

mat
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

como usar for para este problema?

Publicado por Galo (4 intervenciones) el 12/08/2022 17:54:11
Hola Damian,

Segun entiendo, tendria que calcular la distancia entre los 3 puntos (o los lados del triangulo) con la ecuacion "d=sqrt( (Xa-Xb)^2 + (Ya-Yb)^2 )". Teniendo los lados puedo ocupar el T. del coseno para calcular el angulo que se forma entre j+1, j y j-1. como aparece en la imagen.
Creo que hasta ahi entiendo. ahora no sabria como calcular la recta que divide el angulo y que ademas esta a 50 metros.

Para calcular el angulo C

C= arc cos ((a^2+b^2-c^2)/(2ab))
Lago
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

como usar for para este problema?

Publicado por Galo (4 intervenciones) el 30/08/2022 16:13:54
Hola! estoy retomando esto... pude calcular los lados del triangulo que se forma de mis 3 puntos, tambien calcule
el angulo que se forma en el punto C de mi imagen anterior. solo me queda trazar la linea o recta de 50 metros desde "j" hacia fuera del lago y que corte el angulo C en la mitad. dejo parte del codigo... Creo que podria usar un " IF" para plotear la recta si cumple con la condicion de ser la mitad de angulo... pero no se como hacerlo.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
%unir condenadas X e Y del lago
Lago =[Xshp;Yshp];
Lago= Lago';
[n,m]=size(Lago);
for j=2:1:n-2
    Ax=Xshp(j+1);
    Ay=Yshp(j+1);
    Bx=Xshp(j-1);
    By=Yshp(j-1);
    Cx=Xshp(j);
    Cy=Yshp(j);
    %Calcular distancia AB (A=Punto siguente, B= Punto anterior)
    %Distancia=sqrt((x2-x1)^2+(y2-y1)^2)
    AB=sqrt(((Bx-Ax)^2+(By-Ay)^2));
    AC=sqrt(((Cx-Ax)^2+(Cy-Ay)^2));
    CB=sqrt(((Bx-Cx)^2+(By-Cy)^2));
    % Calcular Angulo total de j con Teorema del coseno C= arc cos ((a^2+b^2-c^2)/(2ab))
    Angulo=acosd((AC^2+CB^2-AB^2)/(2*AC*CB));
end
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar