sdl2.ext.algorithms - Useful Algorithms

This module contains some useful algorithms for working with shapes and surfaces. At present it contains functions for clipping lines to fit within a set of 2D boundaries and for determining whether a point falls along a given line.

sdl2.ext.algorithms.liangbarsky(left, top, right, bottom, x1, y1, x2, y2)[source]

Clips a line to a rectangular area.

This implements the Liang-Barsky line clipping algorithm. left, top, right and bottom define the bounds of the clipping area, by which the line from (x1, y1) to (x2, y2) will be clipped.

Parameters
  • left (int) – The left boundary of the clipping area.

  • top (int) – The top boundary of the clipping area.

  • right (int) – The right boundary of the clipping area.

  • bottom (int) – The bottom boundary of the clipping area.

  • x1 (int) – The x-coordinate of the starting point of the line.

  • y1 (int) – The y-coordinate of the starting point of the line.

  • x2 (int) – The x-coordinate of the end point of the line.

  • y2 (int) – The y-coordinate of the end point of the line.

Returns

The start and end coordinates of the clipped line in the form (cx1, cy1, cx2, cy2). If the line does not intersect with the rectangular clipping area, all 4 values will be None.

Return type

tuple

sdl2.ext.algorithms.cohensutherland(left, top, right, bottom, x1, y1, x2, y2)[source]

Clips a line to a rectangular area.

This implements the Cohen-Sutherland line clipping algorithm. left, top, right and bottom define the bounds of the clipping area, by which the line from (x1, y1) to (x2, y2) will be clipped.

Parameters
  • left (int) – The left boundary of the clipping area.

  • top (int) – The top boundary of the clipping area.

  • right (int) – The right boundary of the clipping area.

  • bottom (int) – The bottom boundary of the clipping area.

  • x1 (int) – The x-coordinate of the starting point of the line.

  • y1 (int) – The y-coordinate of the starting point of the line.

  • x2 (int) – The x-coordinate of the end point of the line.

  • y2 (int) – The y-coordinate of the end point of the line.

Returns

The start and end coordinates of the clipped line in the form (cx1, cy1, cx2, cy2). If the line does not intersect with the rectangular clipping area, all 4 values will be None.

Return type

tuple

sdl2.ext.algorithms.clipline(l, t, r, b, x1, y1, x2, y2, method='liangbarsky')[source]

Clips a line to a rectangular area using a given method.

Parameters
  • l (int) – The left boundary of the clipping area.

  • t (int) – The top boundary of the clipping area.

  • r (int) – The right boundary of the clipping area.

  • b (int) – The bottom boundary of the clipping area.

  • x1 (int) – The x-coordinate of the starting point of the line.

  • y1 (int) – The y-coordinate of the starting point of the line.

  • x2 (int) – The x-coordinate of the end point of the line.

  • y2 (int) – The y-coordinate of the end point of the line.

  • method (str, optional) – The method to use for clipping lines, can be either ‘cohensutherland’ or ‘liangbarsky’. Defaults to liangbarsky.

Returns

The start and end coordinates of the clipped line in the form (cx1, cy1, cx2, cy2). If the line does not intersect with the rectangular clipping area, all 4 values will be None.

Return type

tuple

sdl2.ext.algorithms.point_on_line(p1, p2, point)[source]

Checks if a point falls along a given line segment.

Parameters
  • p1 (tuple) – The (x, y) coordinates of the starting point of the line.

  • p2 (tuple) – The (x, y) coordinates of the end point of the line.

  • point (tuple) – The (x, y) coordinates to test against the line.

Returns

True if the point falls along the line segment, otherwise False.

Return type

bool