fbpx
Wikipedia

Algoritmo de Liang-Barsky

El algoritmo de Liang-Barsky es un algoritmo de recorte de líneas similar al algoritmo de Cohen-Sutherland. Usa la ecuación paramétrica de la línea y desigualdades describiendo el rango del área de recorte para determinar las intersecciones entre la línea y el área de recorte. Fue desarrollado por You-Dong Liang y Brian A. Barsky.

Basándonos en las siguientes ecuaciones:

x=x1 + uΔx y=y1 + uΔy 0<=u<=1 

Donde Δx= x2-x1 y Δy= y2-y1

Con estas intersecciones se sabe qué porción de la línea debería ser dibujada. Este algoritmo es significativamente más eficiente que el de Cohen-Sutherland.

Implementación en C# del algoritmo de Liang-Barsky

internal sealed class LiangBarskyClipping : IClippingAlgorithm { private Vector2 _clipMin, _clipMax; public IEnumerable<Vector2> GetBoundingPolygon() { yield return _clipMin; yield return new Vector2(_clipMax.X, _clipMin.Y); yield return _clipMax; yield return new Vector2(_clipMin.X, _clipMax.Y); } public void SetBoundingRectangle(Vector2 start, Vector2 end) { _clipMin = start; _clipMax = end; } public void SetBoundingPolygon(IEnumerable<Vector2> points) { throw new NotSupportedException("see Capabilities =)"); } private delegate bool ClippingHandler(float p, float q); public bool ClipLine(ref Line line) { Vector2 P = line.End - line.Start; float tMinimum = 0, tMaximum = 1; ClippingHandler pqClip = delegate(float directedProjection, float directedDistance) { if (directedProjection == 0) { if (directedDistance < 0) return false; } else { float amount = directedDistance / directedProjection; if (directedProjection < 0) { if (amount > tMaximum) return false; else if (amount > tMinimum) tMinimum = amount; } else { if (amount < tMinimum) return false; else if (amount < tMaximum) tMaximum = amount; } } return true; }; if (pqClip(-P.X, line.Start.X - _clipMin.X)) { if (pqClip(P.X, _clipMax.X - line.Start.X)) { if (pqClip(-P.Y, line.Start.Y - _clipMin.Y)) { if (pqClip(P.Y, _clipMax.Y - line.Start.Y)) { if (tMaximum < 1) { line.End.X = line.Start.X + tMaximum * P.X; line.End.Y = line.Start.Y + tMaximum * P.Y; } if (tMinimum > 0) { line.Start.X += tMinimum * P.X; line.Start.Y += tMinimum * P.Y; } return true; } } } } return false; } public ClippingCapabilities Capabilities { get { return ClippingCapabilities.RectangleWindow; } } public override string ToString() { return "Liang-Barsky algorithm"; } } // This code was implemented by Grishul Eugeny as part of preparation // to exam in ITMO university 

Adaptación a recorte de polígonos

Se amplía con un planteamiento similar el del método Sutherland-Hodgman. Las representaciones paramétricas de líneas se utilizan para procesar las aristas de los polígonos en orden alrededor del perímetro del polígono utilizando procedimientos de prueba similares a aquellos que se emplean en el recorte de líneas.

Véase también

  •   Datos: Q606795

algoritmo, liang, barsky, algoritmo, liang, barsky, algoritmo, recorte, líneas, similar, algoritmo, cohen, sutherland, ecuación, paramétrica, línea, desigualdades, describiendo, rango, área, recorte, para, determinar, intersecciones, entre, línea, área, recort. El algoritmo de Liang Barsky es un algoritmo de recorte de lineas similar al algoritmo de Cohen Sutherland Usa la ecuacion parametrica de la linea y desigualdades describiendo el rango del area de recorte para determinar las intersecciones entre la linea y el area de recorte Fue desarrollado por You Dong Liang y Brian A Barsky Basandonos en las siguientes ecuaciones x x1 uDx y y1 uDy 0 lt u lt 1 Donde Dx x2 x1 y Dy y2 y1Con estas intersecciones se sabe que porcion de la linea deberia ser dibujada Este algoritmo es significativamente mas eficiente que el de Cohen Sutherland Implementacion en C del algoritmo de Liang Barsky Editarinternal sealed class LiangBarskyClipping IClippingAlgorithm private Vector2 clipMin clipMax public IEnumerable lt Vector2 gt GetBoundingPolygon yield return clipMin yield return new Vector2 clipMax X clipMin Y yield return clipMax yield return new Vector2 clipMin X clipMax Y public void SetBoundingRectangle Vector2 start Vector2 end clipMin start clipMax end public void SetBoundingPolygon IEnumerable lt Vector2 gt points throw new NotSupportedException see Capabilities private delegate bool ClippingHandler float p float q public bool ClipLine ref Line line Vector2 P line End line Start float tMinimum 0 tMaximum 1 ClippingHandler pqClip delegate float directedProjection float directedDistance if directedProjection 0 if directedDistance lt 0 return false else float amount directedDistance directedProjection if directedProjection lt 0 if amount gt tMaximum return false else if amount gt tMinimum tMinimum amount else if amount lt tMinimum return false else if amount lt tMaximum tMaximum amount return true if pqClip P X line Start X clipMin X if pqClip P X clipMax X line Start X if pqClip P Y line Start Y clipMin Y if pqClip P Y clipMax Y line Start Y if tMaximum lt 1 line End X line Start X tMaximum P X line End Y line Start Y tMaximum P Y if tMinimum gt 0 line Start X tMinimum P X line Start Y tMinimum P Y return true return false public ClippingCapabilities Capabilities get return ClippingCapabilities RectangleWindow public override string ToString return Liang Barsky algorithm This code was implemented by Grishul Eugeny as part of preparation to exam in ITMO universityAdaptacion a recorte de poligonos EditarSe amplia con un planteamiento similar el del metodo Sutherland Hodgman Las representaciones parametricas de lineas se utilizan para procesar las aristas de los poligonos en orden alrededor del perimetro del poligono utilizando procedimientos de prueba similares a aquellos que se emplean en el recorte de lineas Vease tambien EditarCohen Sutherland algoritmo para recorte de lineas Cyrus Beck algoritmo para recorte de lineas Fast Clipping algoritmo para recorte de lineas Nicholl Lee Nicholl algoritmo para recorte de lineas Sutherland Hodgman algoritmo para recorte de lineas y poligonos Weiler Atherton algoritmo para recorte de lineas y poligonos Recorte de Poligonos algoritmos de recorte de poligonos Datos Q606795 Obtenido de https es wikipedia org w index php title Algoritmo de Liang Barsky amp oldid 139756430, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos