项目作者: scivision

项目描述 :
Line clipping in clean, simple, modern Fortran and Python
高级语言: Fortran
项目地址: git://github.com/scivision/lineclipping-python-fortran.git
创建时间: 2018-02-21T22:23:13Z
项目社区:https://github.com/scivision/lineclipping-python-fortran

开源协议:MIT License

下载


Line clipping

Actions Status

PyPi versions
PyPi Download stats

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

Install

To install the latest release:

  1. pip install pylineclip

Fortran

If you want to use the Fortran Cohen-Sutherland line clipping modules
directly (optional):

  1. meson build
  2. meson test -C build

Usage

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.

Python

  1. import pylineclip.lineclipping as lc
  2. x3,y3,x4,y4 = lc.cohensutherland((xmin, ymax, xmax, ymin, x1, y1, x2, y2)

If no intersection, (None, None, None, None) is returned.

Fortran

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

  1. use lineclipping
  2. call cohensutherland(xmin,ymax,xmax,ymin,x1,y1,x2,y2)

The arguments are:

  1. INPUTS
  2. ------
  3. xmin,ymax,xmax,ymin: upper left and lower right corners of box (pixel coordinates)
  4. INOUT
  5. -----
  6. x1,y1,x2,y2:
  7. in - endpoints of line
  8. out - intersection points with box. If no intersection, all NaN