# subdivide curve with python

Is there an accurate way to subdivide a Curve without using a lot of math? I would like to subdivide the spline and then make it noisy.

import bpy
from mathutils import Euler, Matrix, Quaternion, Vector
import random

# Make collection
if 'NOISE_CURVE' not in bpy.context.collection.children:

print('hät ä keini, odr.')
col = bpy.data.collections.new('NOISE_CURVE')

def CoordPoints_random(First_Point, coords):

# Last Point
X_last_point = random.uniform(-8.000, 8.000)
Y_last_point = random.uniform(-8.000, 8.000)
Z_last_point = random.uniform(-8.000, -20.0)

# Start-Point
coords.append(First_Point)

# random points for subdivision
Vector_count = random.randint(5, 30)

# Try to subdivide the start and end-point Coordinates  <----------The Question is here
X_subdiv = (First_Point[0] + X_last_point) / Vector_count
Y_subdiv = (First_Point[1] + Y_last_point) / Vector_count
Z_subdiv = (First_Point[2] + Z_last_point) / Vector_count

# X,Y,Z erschaffen
X = X_subdiv
Y = Y_subdiv
Z = Z_subdiv

# Random Points between Start- and End-Point
for VecPoint in range(Vector_count):
random.seed()

# Make noise
X += X_subdiv + random.uniform(0.500, -0.500)
Y += Y_subdiv + random.uniform(0.500, -0.500)
Z += Z_subdiv + random.uniform(0.500, -0.500)

coords.append((X,Y,Z))
coords.append((X_last_point, Y_last_point,Z_last_point))

### Test
print("First_Point ", First_Point)
print("Last_Point ", X_last_point, Y_last_point, Z_last_point)
for i in coords:
print(i)
return coords

def create_lightning_Curve():

### Create a curve-container
lightning_curve = bpy.data.curves.new('lightning','CURVE')
# make some settings to the container
lightning_curve.dimensions = '3D'
lightning_curve.resolution_u = 1
lightning_curve.use_fill_caps = True
lightning_curve.fill_mode = 'FULL'
lightning_curve.bevel_depth = 0.1
lightning_curve.bevel_resolution = 0

### create splines (or multiple curves (= splines) in the curve-container)
coords = [] ##### Point coordinates
First_Point = bpy.context.scene.cursor.location #3D-Cursor als Start-Punkt
CoordPoints_random(First_Point, coords) # Make Coordinates

Bezline = lightning_curve.splines.new('BEZIER') #Create a spline (with one Point already)
Bezline.bezier_points.add(len(coords)-1) # add Points without Coordinates (-1 to not close the curve)
for number, coord in enumerate(coords): # give the Points the Coordinates
x,y,z = coord
Bezline.bezier_points[number].co = (x, y, z)

#Create object
obj = bpy.data.objects.new('NoiseCurve', lightning_curve)