# Grasshopper Points and Curves

## Introduction

**LEVEL: INTRODUCTORY**

In software like Rhino you use the cursor to define the starting point of a curve or the location for a cube. Grasshopper doesn’t have a cursor, instead it uses points. These points contain information, like a location and a direction and can be used as input for other geometry. Points can be defined in world space or in parametric space, linked to other geometry.

Curves are the most basic geometry to link with points. Points can be used to define a curve (edit points or control points), but curves can also be used to define a point or multiple points.

## Points

In world space the point is linked to the 3 dimensional coordinate system with x, y and z axis, the point is defined by x, y and z values. These points can be created either in Rhino or in Grasshopper.

When a point is defined in parametric space, it is linked to a location on an object. This can be done in Grasshopper by extracting a point from geometry. Information is being re-used, output is being used as input. This is the strength of a Grasshopper definition, it is adaptable and responsive. By keeping this in mind, you have to determine whether you define points, curves and other geometry in Rhino or in Grasshopper.

### Creating a point in world space

Let’s start with the creation of points. This can either be done in Grasshopper itself or in Rhino. Grasshopper has two components for the creation of points. The first is a parameter and the second a vector.

**Point as parameter**

A point parameter can link a point created in Rhino to Grasshopper. The parameter enables you to define the point or points in the Rhino viewport. The input is therefore defined by where the cursor is clicked within the viewport. If the point is defined in Rhino and then selected for the Parameter, the points can still be moved within Rhino. The parameter will only contain the data of the location of the point in world space. If the location of the point is changed in Rhino the parameter will be updated with the new location.

**Point as vector**

The point however also can be numerically defined in Grasshopper by connecting a numerical input to the action of creating a point or points. In the Vector tab we can find the Point option. This Point component has 3 inputs, one for every axis. These can be simply defined by typing them in, attaching either a number slider or a single number primitive. These values can be changed at any time. De alteration of the position of the point and all its relations will be re calculated throughout the network. When the point is created in this manner, it cannot be moved in Rhino.

### Creating a point in parametric space, extracting a point

Points can be defined in parametric space, a location on an object. This will define the location in relation to the geometry, instead of the location in world space. By defining a point parametrically, its location will adapt along with the geometry. If the curve is moved, shortened or its shape is changed, the point will adapt accordingly. Working in world space does not have this advantage. There are several methods of extracting points from objects. Key in the method is the definition of the dimension. This can be in units of length or it can be in units of a reparameteresized curve. Another method is the division of the curve in segments based on length or relative number of segments. There are two kinds of points which can be extracted from a curve.

- The Control Vertices
- Points on the Curve

The choice on which tool to use to extract a point from a curve doesn't only depend on if the curve is reparameterized but also on the additional information the component can output. In most of the cases the component supports the selection of more than 1 point or will generate more than 1 points. In essence any point on the curve can be selected.

**Extracting point through analysis**

Extraction can be done in several ways. First option is through analysis of a curve, surface or other geometry. For example, with ‘end points’ the start and end point of a curve can be extracted. The same with ‘box corners’. This results in eight specific points, extracted from a cube.

**Extracting point through division**

Another way of extraction is through division. A curve can be divided in segments with equal length or with a preset distance. The points extracted can be used as input for new geometry with spacing related to the curve. A surface can be divided in the u and v direction to extract points from the intersections.

### Other ways of extracting points

These are the basic options of extracting points. Of course there are many more ways. Some examples;

Points can be generated through populating a 2D surface or 3D object within a defined domain.

The intersection of two lines gives a point.

The hexagonal grid component has ‘point at grid centers’ as output.

## Curves

Grasshopper uses primitives for the basic lines and spline components to express the complex NURBS curves and polylines used in Rhino.

**Degrees and control points**
The degree of a curve defines the influence of the control points. A curve with degree 1 is a straight line, or a polyline with straight sections. The control points are placed on the curve itself. The higher the degree, the more curvature. Degree 3 and 5 are commonly used for NURBS curves. Control points are placed outside of the curve, ‘pulling’ on the curve to define its shape.

**Edit points**
Edit points are always placed on the curve. This is useful when a curve has to go through a specific point. The entire curve will react and change shape when moving edit points. Where control points only have a local influence.

### One dimensional space of a curve

Locations on a curve are defined by 1 dimensional space coordinates U. A position on a curve can be defined by the length or is related to the length of the curve. In this case the position is related to world space. However the location on a curve can also be defined by its relative position on the curve. The start point will have the value 0 and the end point the value 1. A point placed on the line will have a value between 0 and 1. The curve is Parametrised.

**Reparameterisation**

In some cases it can be that the parameterisation of the curve is giving an indication of the length of the curve. This can be a maximum value larger than 1. When the curve is reparameterised the U value will be evenly distributed from 0 to 1.

### Creating and extracting curves

Just like points, curves can be created and referenced in Rhino or created and extracted in Grasshopper.

**Curve as parameter**

Within Rhino created curves can be linked to the curve parameter in Grasshopper. Edges of Rhino geometry or contour lines can also be referenced. This works the same as with points. Select the

component. Then right-click on the component to set one or multiple curves created in Rhino.

**Creating a curve through points**

When a set of points is extracted as explained in the previous part, they can be used as input for new curves. You’ll need a minimum of two point (start and end) to create a curve. More complex curves can be created with interpolation components for example, a curve runs through the set of points and the degree can be set. A set of points can also be used as control points input. These curves will have a different shape.

**Extracting curves**
Just like points, curves can be extracted through the analysis of existing geometry in Grasshopper, the edges of a surface or 3D geometry.

The extracted curves can be used as input for new surfaces and other geometry. The extracted curves can also be analyzed or divided to extract points. This constant

## Examples and tutorials

The use of curves for point generation forms a part of the main strategy of generating geometry in Grasshopper. The points can be used as location for other objects. They can be used for generating curves or surfaces and they can be used for defining relations.

On the right some examples on how to use points and curves.

Here's a list with more elaborate examples and tutorials: