Guten Abend,
ich bin recht neu bei Blender und erst recht in diesem Forum. Ich habe folgendes Problem: Ich möchte einen Pulszug darstellen. Bei diesem Pulszug möchte ich an einen Puls ranzoomen. Unter diesem Gauss-Puls sollen dann nochmal Gaußpulse erscheinen, wobei der vorherige als Einhüllende dienen soll. Soweit bin ich gekommen.
Nun mein Problem:
In einem weiteren Animationschritt sollen sich die Pulse unter der Einhüllenden bewegen und dabei ihre Amplitude anpassen, sodass sie unter der Einhüllenden bleiben. Die Bewegung in x-Richtung ist kein Problem aber ich hänge bei der Anpassung der Amplitude. Ich wäre froh, wenn mir jemand helfen könnte.
Das Problem ist also bei der Funktion update_amplitude() aber ich finde es einfach nicht, bzw. verstehe es zu wenig.
ich bin recht neu bei Blender und erst recht in diesem Forum. Ich habe folgendes Problem: Ich möchte einen Pulszug darstellen. Bei diesem Pulszug möchte ich an einen Puls ranzoomen. Unter diesem Gauss-Puls sollen dann nochmal Gaußpulse erscheinen, wobei der vorherige als Einhüllende dienen soll. Soweit bin ich gekommen.
Nun mein Problem:
In einem weiteren Animationschritt sollen sich die Pulse unter der Einhüllenden bewegen und dabei ihre Amplitude anpassen, sodass sie unter der Einhüllenden bleiben. Die Bewegung in x-Richtung ist kein Problem aber ich hänge bei der Anpassung der Amplitude. Ich wäre froh, wenn mir jemand helfen könnte.
Das Problem ist also bei der Funktion update_amplitude() aber ich finde es einfach nicht, bzw. verstehe es zu wenig.
Code:
import bpy
import math
print("jetzt")
A_main = 3.0
mu_main = 0.0
sigma_main = .8
num_points = 1000
x_range = 26
def delete_existing_objects():
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete()
def create_gaussian_curve(name="GaussianCurve", A=1.0, mu=0.0, sigma=1.0, num_points=100, x_range=100):
curve_data = bpy.data.curves.new(name=name, type='CURVE')
curve_data.dimensions = '3D'
curve_object = bpy.data.objects.new(name, curve_data)
bpy.context.collection.objects.link(curve_object)
bpy.context.view_layer.objects.active = curve_object
bpy.ops.object.origin_set(type='ORIGIN_CENTER_OF_MASS', center='BOUNDS')
spline = curve_data.splines.new(type='POLY')
spline.points.add(count=num_points)
# Berechne die Punkte der Kurve
for i in range(num_points):
x = (i / (num_points - 1)) * 2 * x_range - x_range
y = A * math.exp(-(x - mu)**2 / (2 * sigma**2))
spline.points[i].co = (x, y, 0, 1)
return curve_object
def update_amplitude(curve_object, A_new, x=0.0, sigma=.05):
spline = curve_object.data.splines[0]
for point in spline.points:
x = point.co[0]
y = A_new * math.exp(-(x)**2 / (2 * sigma**2))
point.co[1] = y
delete_existing_objects()
for i in range(-5, 5):
curve_object = create_gaussian_curve(A=A_main, mu=mu_main - (i * 8), sigma=sigma_main, num_points=num_points, x_range=x_range)
bpy.ops.object.camera_add(location=(0, 0, 50))
camera = bpy.context.object
camera.rotation_euler = (0, 0, 0)
bpy.context.scene.camera = camera
camera.location = (0, 0, 50)
camera.keyframe_insert(data_path="location", frame=1)
camera.location = (0, 1.5, 5)
camera.keyframe_insert(data_path="location", frame=100)
camera.data.lens = 35
camera.data.keyframe_insert(data_path="lens", frame=1)
camera.data.lens = 25
camera.data.keyframe_insert(data_path="lens", frame=100)
curve_objects = []
for i in range(-4, 5):
mu = 0 - i / 2
A = A_main * math.exp(-(mu)**2 / (2 * sigma_main**2))
curve_object = create_gaussian_curve(name="GaussianCurve", A=A, mu=mu, sigma=0.05, num_points=1000, x_range=5)
curve_object.hide_viewport = True
curve_object.keyframe_insert(data_path="hide_viewport", frame=1)
curve_object.hide_viewport = False
curve_object.keyframe_insert(data_path="hide_viewport", frame=100)
curve_objects.append(curve_object)
for frame in range(120, 151):
for curve_object in curve_objects[0:1]:
x = 0+frame/150/2
A_new = A_main * math.exp(-(x)**2 / (2 * sigma_main**2))
print(A_new)
update_amplitude(curve_object, A_new, x=x, sigma=0.05)
curve_object.location.x = x
curve_object.keyframe_insert(data_path="location", frame=frame)
#curve_object.data.update()
#curve_object.keyframe_insert(data_path="location", frame=frame)
#curve_object.data.update()
# Animation Einstellungen
bpy.context.scene.frame_start = 1
bpy.context.scene.frame_end = 150
bpy.context.view_layer.update()