Documentos de Académico
Documentos de Profesional
Documentos de Cultura
NACIONAL
“ESIME CULHUACÁN”
INGENIERÍA EN COMPUTACIÓN
ANÁLISIS DE ALGORITMOS
Aplicación de Intersección de
Polígonos e intersección de rectas
PROFESORA: GUARDIÁN SOTO BEATRIZ
DOLORES
ALUMNA:
BENITEZ CONTRERAS JESSICA YARELY
GRUPO:5CM13
Teoría
DESARROLLO
c) Pseudocódigo
return TRUE;
}
a) Complejidad temporal.
Este algoritmo requiere un tiempo de ejecución de O(n²). Cuando cada par de segmentos
está intersectando, cualquier algoritmo toma Ω(n²) porque tiene que reportar todas las
intersecciones.
En el caso general el número total de puntos de intersección es mucho menor que una cota
cuadrática.
T(f(n))=O(n²)
d) Código e implementación.
#include <iostream>
int main() {
}
Teoría
DESARROLLO
Algunos algoritmos para resolver están basados en barrido rotacional, procesan vértices en
el orden de sus coordenadas polares los ángulos que forman con referencia a un vértice son
dos Graham y Jarvis,
El casco convexo es el área cerrada mínima que puede cubrir todos los puntos de datos
dados.
El algoritmo de escaneo de Graham encontrará los puntos de esquina del casco convexo. En
este algoritmo, al principio se elige el punto más bajo. Ese punto es el punto de partida del
casco convexo. Los vértices restantes n-1 se ordenan según la dirección antihoraria desde el
punto de inicio. Si dos o más puntos están formando el mismo ángulo, elimine todos los
puntos del mismo ángulo, excepto el punto más alejado desde el principio.
Desde los puntos restantes, empújalos hacia la pila. Y retire los elementos de la pila uno por
uno, cuando la orientación no sea en sentido antihorario para el punto superior de la pila, el
segundo punto superior y los puntos de punto recientemente seleccionados [i], después de
verificar, inserte los puntos [i] en la pila.
Begin
minY := points[0].y
min := 0
for i := 1 to n-1 do
y := points[i].y
minY := points[i].y
min := i
done
p0 := points[0]
arrSize := 1
for i := 1 to n, do
i := i + 1
done
points[arrSize] := points[i]
arrSize := arrSize + 1
done
return cHullPoints
for i := 3 to arrSize, do
while top of stack, item below the top and points[i] is not in
anticlockwise rotation, do
done
done
done
End
b) Complejidad temporal.
Dado un conjunto de puntos Q, encontrar los puntos más cercanos. Un algoritmo de “fuerza
bruta” requiere analizar O(n²) pares de puntos.
T(f(n))=O(n²)
d) Código e implementación.
#include<iostream>
#include<stack>
#include<algorithm>
#include<vector>
int x, y;
};
stk.pop();
return res;
if (val == 0)
return 0; //colinear
if(dir == 0)
return (dir==2)? -1 : 1;
vector<point> convexHullPoints;
int y = points[i].y;
minY = points[i].y;
min = i;
p0 = points[0];
i++;
points[arrSize] = points[i];
arrSize++;
if(arrSize < 3)
stack<point> stk;
stk.pop(); //when top, second top and ith point are not making left turn, remove
point
stk.push(points[i]);
while(!stk.empty()) {
stk.pop();
int main() {
{3,-2},{6,-10},{0,-6},{-9,-5},{-8,-2},{-8,0},{-10,3},{-2,2},{-10,4}};
int n = 18;
vector<point> result;
cout << "Los puntos límite del poligono convexo son: "<<endl;
vector<point>::iterator it;
cout << "(" << it->x << ", " <<it->y <<") ";