designcoding
About Table of Contents Keywords Monthly Archive
Support designcoding!

Curve Equations Revisited

October 14, 2021 | Algorithms
#parametric-curve #rhino-python

This is the continuation of the previous post on parametric curve equations. In this new version, the script picks a NURBS curve from the user. Then, it analyses the curve’s degree and control points. Unfortunately, only the curves with degree+1 number of control points can be processed. In the future, I hope that I will be able to extend this script to include multi-span curves with more than degree +1 control points. Finally, the script creates the three functions for the x, y, and z axes. This part is the same as the previous post. In this version, I tried to add a simplification method. That method is actually a string replacement method for the expressions like “+0, -0, *1, **1, etc.”. However, I decided not to include it yet.

I think the most important limitation of Rhino Python is still waiting for a solution: The Iron Python support, which has no ability to use external modules such as numpy. I still hope that one day this limitation will be over. Until then, we will have to use the native Python and develop our own methods for even the simplest tasks. I must admit that this limitation gives an opportunity for a better educational environment, but limits its effective utilization a lot. In this script, we revisited the curve equations and their user interaction. In the future, this and similar scripts can be combined into a “Lunchbox”-like a small add-on in Rhino.

I still believe that text-based programming will continue to be the fundamental skill in design computing. You can copy and test the below code in Rhino 6 or 7, by typing the “EditPythonScript” command and then, running the code by hitting F5.

import rhinoscriptsyntax as rs
from math import *
f = g = h = ""
curve = rs.GetObject("Pick the curve")
if not rs.IsCurve(curve):
	print("Sorry, this is not a curve")
else:
	d = rs.CurveDegree(curve)
	print("This is a degree-"+str(d)+" curve")
	p = rs.CurvePoints(curve)
	print("It has "+str(len(p))+" control points")
	if len(p) != d + 1:
		print("Unfortunately the control points must be degree + 1 to run this script")
	else:
		for i in range(d + 1):
			c = factorial(d)/(factorial(i)*(factorial(d-i)))
			f += "("+str(c)+"*((1-t)**("+str(d)+"-"+str(i)+"))*(t**"+str(i)+")*"+str(p[i][0])+")+"
			g += "("+str(c)+"*((1-t)**("+str(d)+"-"+str(i)+"))*(t**"+str(i)+")*"+str(p[i][1])+")+"
			h += "("+str(c)+"*((1-t)**("+str(d)+"-"+str(i)+"))*(t**"+str(i)+")*"+str(p[i][2])+")+"
		f += "0"; g += "0"; h += "0"
		print("These are the parametric equations of the curve")
		print("f = "+f)
		print("g = "+g)
		print("h = "+h)
		print("Now, testing the curve by plotting the equations within the domain (0,1)")
		for i in range(0,100):
			t = i / 100
			point = [eval(f), eval(g), eval(h)]
			rs.AddPoint(point)	

Cite this post

Yazar, T. (2021, October 14). Curve Equations Revisited. designcoding. Retrieved August 24, 2026, from https://www.designcoding.net/curve-equations-revisited/

Related Posts

Discrete Fourier Transform

May 8, 2025

The Fourier Transform is a powerful mathematical technique that allows us to analyze the different frequency components within a signal or shape. Its discrete version, the Discrete Fourier Transform (DFT), is used when working with numerical data. I studied the Fourier Series here before. One of the most fascinating aspects of the DFT is that it can represent a signal or shape using rotating circles (or vectors). Each circle corresponds to a specific frequency, amplitude, and phase. When connected in…

Quick Parametric Curves

July 28, 2024

Here is the shortest possible way of generating quick parametric curves in Rhino Python. So, you may change the f, g, and h functions to test any function curve. In this Python code, the list comprehension [(f(t), g(t), h(t)) for t in [t0 + i*dt for i in range(int((t1-t0)/dt)+1)]] works by first generating a list of t values from t0 to t1 with an increment of dt using the inner comprehension. The outer comprehension then iterates over these t values,…

B-Spline Construction

January 25, 2024

I have been studying the Bezier-De Casteljau algorithm for several years. Last week, I finally managed to understand and implement B-Spline Construction in Rhino and Grasshopper Python code, using the Cox-De Boor algorithm. This algorithm calculates the effect of control points on a B-Spline with many control points. After this, I am not limited to the degree+1 control points. This animation shows both algorithms working together. This Rhino Python code in a Grasshopper definition can handle three tasks. The first…

Parametric Curve Equations

September 19, 2021

The parametric curve equations are good examples to demonstrate the bridge between computer-aided design and mathematics. Although useless and pointless, it is a good exercise to extract the curve equations. In this Rhino Python code, I present a generalized equation extractor for Rhino. Rhino curves are good examples de Casteljau and Bézier curves. You can see the mathematical underpinnings of Rhino curves with this exercise: This code asks the user the degree of the curve. By default, Rhino’s curves are…

Derivative and Slope

April 6, 2018

Yes, interesting topics started to reveal themselves, when I dig into the function curves, especially in the parametric representation. The first interesting application is the “derivative”. Nobody in high school told me that the derivative of a function at a given point gives the slope of the graph at that point. Moreover, it is possible to convert the slope value into an angle in degrees, showing the angle of the tangent line to the x-axis at that point. They are…

  • Chapters

    • Algorithms
    • Discourses
    • Fabrications
    • Studios
  • Explore

    • All Keywords
    • Table of Contents
    • Monthly Archive
    • #grasshopper
    • #linear-algebra
    • #tutorial
    • #vector
    • #bezier-curve
    • #polyhedra
    • #rhinoceros
    • #dome
    • #design-object
    • #simulation
    • #fourier
    • #b-spline
    • #catenary
    • #design-education
    • #dual
    • #art
    • #image-sampler
    • #growth
    • #vector-field
    • #circle
  • 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