designcoding
About Table of Contents Keywords Monthly Archive
Support designcoding!

Convex Hull with Rhino Python

July 28, 2017 | Algorithms
#computational-geometry #rhino-python

This Rhino Python code calculates the cross-product determinant used to determine the orientation of three points (current, next_point, and point) to see if they form a left turn or a right turn. This is a well-known technique in computational geometry to check the relative orientation of points. In this script, the direction is the cross-product determinant that determines the relative orientation of the points. If the result is negative, the point is to the right of the line from current to next_point, indicating a clockwise turn. On the other hand, if the result is positive, this means they are counter-clockwise. If the result is zero, this means the points are collinear. Therefore, the algorithm correctly identifies the points that form the convex hull by wrapping around the set of points.

Convex Hull with Rhino Python animation

The Convex Hull Generator for Rhino is a tool designed to create convex hulls from selected point clouds. It uses the gift-wrapping algorithm (Jarvis March). Thus, users can select points within Rhino, and the script will calculate and draw the convex boundary by connecting the outermost points. It is educational for those who want to understand the cross-product.

import rhinoscriptsyntax as rs
def convex_hull(points):
	start = min(points, key=lambda p: p[0])
	hull = [start]
	current = start
	while True:
		next_point = points[0]
		for point in points:
			if point == current:
				continue
			direction = (next_point[0] - current[0]) * (point[1] - current[1]) - (next_point[1] - current[1]) * (point[0] - current[0])
			if direction < 0 or next_point == current:
				next_point = point
		if next_point == start:
			break
		else:
			hull.append(next_point)
			current = next_point
	return hull
points = rs.GetPointCoordinates("Select points")
if points:
	hull = convex_hull(points)
	for i in range(len(hull)):
		rs.AddLine(hull[i], hull[(i + 1) % len(hull)])
Convex Hull with Rhino Python computational-geometry, rhino-python
Python file (PY)Download

Cite this post

Yazar, T. (2017, July 28). Convex Hull with Rhino Python. designcoding. Retrieved August 24, 2026, from https://www.designcoding.net/convex-hull-with-rhino-python/

Related Posts

Delaunay Triangulation with Rhino Python

July 27, 2017

Boris Nikolayevich Delaunay was a Russian mathematician and mountain climber. He developed the Delaunay triangulation, which is a method in computational geometry. It is a triangulation of a set of points such that no point is inside the circumcircle of any triangle formed by the points. It’s widely used in computer graphics and mesh generation. In 2013, I made the brute force code in Rhino Python which is a slow solution to this problem. It used to be a nice…

Detecting Closed Shapes

August 26, 2013

Again, I continue with some simple solutions for Grasshopper. The surface split component gives all possible surfaces sliced with given curves. And it creates “invalid” curves with at least one open edge. I used this to perceive the closed regions within a given complex curve set. Just put the “Clean” component to erase the outer invalid surfaces and there remain the closed ones. However this time the question was where to put the circle and what its radius of it…

Detecting Inner Regions in Grasshopper

August 26, 2013

This is a simple trick that shows the utilization of the “surface split” component in Grasshopper. It is used for detecting the inner regions of any given two-dimensional linework. Thus, it resembles the hatch boundary detection of AutoCAD and similar software. There is no built-in hatch component in Grasshopper. But maybe you can use this as a starting point if you want to develop it. The definition starts with drawing a circle around a point large enough. The size of…

Curve Farthest Point

August 26, 2013

Today’s tip is about two-dimensional curve-point calculations. It is very handy to use “closest point” components in Grasshopper. You can calculate distances and directions between curves, surfaces, and points. Then, place point objects in relation to the proximity of another object. However, there is no “farthest point” implemented yet. I tried to calculate the farthest point from a curve. First, I tried to translate the curve in a fashion that would result in the opposite of the closest point calculation….

Shortest Path Generator

April 30, 2012

This is the continuation of my scripting experiment within Grasshopper. Like the minimum spanning tree algorithm, this is also a famous problem of computational geometry; the shortest path problem. I’m now coding faster and understanding the namespace more easily in Grasshopper. This time, the challenge was implementing Dijkstra’s algorithm for the Shortest Path Generator. Again, it’s a quite powerful algorithm, I even plan to use it in my current project. Although there is a faster alternative, Shortest Walk-in Food4Rhino and it…

  • Chapters

    • Algorithms
    • Discourses
    • Fabrications
    • Studios
  • Explore

    • All Keywords
    • Table of Contents
    • Monthly Archive
    • #grasshopper
    • #linear-algebra
    • #vector
    • #parametric-curve
    • #tutorial
    • #polyhedra
    • #bezier-curve
    • #design-education
    • #simulation
    • #fourier
    • #parametric-surface
    • #dual
    • #art
    • #design-object
    • #image-sampler
    • #growth
    • #vector-field
    • #circle
    • #goldberg-polyhedra
    • #calculus
  • Search

  • Support designcoding!

  • Enjoying designcoding? Support me on Patreon to keep it growing. Thank you!

  • copyright 2026 designcoding.net | about | privacy policy | end user license agreement