lineclipping.f90
Cohen-Sutherland line clipping algorithm for
massively parallel coarray modern Fortran. Input scalars or arrays,
output intersections or NaN
if no intersection.
lineClipping.py
Cohen-Sutherland line clipping algorithm for Python.
Input scalars, output intersection length, or None
if no intersection.
Julia line clipping is at https://github.com/scivision/lineclipping-julia
To install the latest release:
pip install pylineclip
If you want to use the Fortran Cohen-Sutherland line clipping modules directly (optional):
meson build
meson test -C build
The main difference with textbook implementations is that I return a sentinel value (NaN, None, nothing) if there's no intersection of line with box.
import pylineclip.lineclipping as lc
x3,y3,x4,y4 = lc.cohensutherland((xmin, ymax, xmax, ymin, x1, y1, x2, y2)
If no intersection, (None, None, None, None)
is returned.
lineclipping.f90 has two subroutines. Pick Ccohensutherland if you're calling from C/C++/Python, which cannot tolerate assummed-shape arrays. It's a slim wrapper to cohensutherland which is elemental (can handle scalar or any rank array).
Fortran programs will simply use
use lineclipping
call cohensutherland(xmin,ymax,xmax,ymin,x1,y1,x2,y2)
The arguments are:
INPUTS
------
xmin,ymax,xmax,ymin: upper left and lower right corners of box (pixel coordinates)
INOUT
-----
x1,y1,x2,y2:
in - endpoints of line
out - intersection points with box. If no intersection, all NaN