This commit is contained in:
Benjamín 2021-09-03 06:45:50 +02:00
parent 4b97fda8f2
commit 2cd4b781fb
4 changed files with 17 additions and 11 deletions

@ -21,11 +21,13 @@ class RopeInteractiveDot:
for object_ in self.scene.nrd_objects: for object_ in self.scene.nrd_objects:
if object_.__class__.__name__ == "Rope": if object_.__class__.__name__ == "Rope":
for node in object_.nodes: for node in object_.nodes:
if math.sqrt(sum((node.position - self.position) ** 2)) < self.forcefield_range: if node.locked is False:
force_vector = node.position - self.position if math.sqrt(sum((node.position - self.position) ** 2)) < self.forcefield_range:
force_vector /= math.sqrt(sum(force_vector ** 2)) force_vector = node.position - self.position
force_vector *= self.force full_force_vector = (force_vector / math.sqrt(sum(force_vector ** 2))) * self.forcefield_range
force_vector = full_force_vector - force_vector
force_vector /= self.forcefield_range / self.force
node.position += force_vector node.position += force_vector

@ -36,7 +36,7 @@ class Rope:
self.a.position = center - connection_vector self.a.position = center - connection_vector
def __init__(self, position, length, nodes_n, nodes_r, rope_width, scene, gravity=1, start_angle=1, def __init__(self, position, length, nodes_n, nodes_r, rope_width, scene, gravity=1, start_angle=1,
node_color=(255, 100, 100), rope_color=(255, 160, 160)): balance_amount=20, node_color=(255, 100, 100), rope_color=(255, 160, 160)):
self.position = position self.position = position
self.length = length self.length = length
self.nodes_n = nodes_n self.nodes_n = nodes_n
@ -44,6 +44,7 @@ class Rope:
self.rope_width = rope_width self.rope_width = rope_width
self.gravity = gravity self.gravity = gravity
self.start_angle = start_angle self.start_angle = start_angle
self.balance_amount = balance_amount
self.scene = scene self.scene = scene
self.node_color = node_color self.node_color = node_color
self.rope_color = rope_color self.rope_color = rope_color
@ -69,7 +70,7 @@ class Rope:
for node in self.nodes: for node in self.nodes:
node.progress(self.gravity) node.progress(self.gravity)
for _ in range(6): for _ in range(self.balance_amount):
for connection in self.connections: for connection in self.connections:
connection.balance() connection.balance()

@ -1,5 +1,6 @@
from Objects.Scene import Scene from Objects.Scene import Scene
from numpy import array as a from numpy import array as a
import pygame
from UI.Objects.nr_objects.dynamic_objects.Rope import Rope from UI.Objects.nr_objects.dynamic_objects.Rope import Rope
from UI.Objects.nr_objects.controllable_objects.RopeInteractiveDot import RopeInteractiveDot from UI.Objects.nr_objects.controllable_objects.RopeInteractiveDot import RopeInteractiveDot
@ -12,8 +13,10 @@ class RopeScene(Scene):
super().__init__(s__size[0], s__size[1], scene_size, bg) super().__init__(s__size[0], s__size[1], scene_size, bg)
r0 = Rope(a([300, 50]), 400, 20, 2, 2, self, gravity=5) r0 = Rope(a([300, 50]), 200, 40, 2, 2, self, gravity=2)
self.nrd_objects.append(r0) self.nrd_objects.append(r0)
rd0 = RopeInteractiveDot(a([100, 100]), 20, (100, 255, 100), 5, 100, self) rd0 = RopeInteractiveDot(a([100, 100]), 10, (100, 255, 100), 20, 100, self)
self.nrc_objects.append(rd0) self.nrc_objects.append(rd0)
pygame.mouse.set_visible(False)

@ -9,7 +9,7 @@ import time
screen_size = a([200, 500]) screen_size = a([200, 500])
scene = RopeScene(screen_size) scene = MultisceneInMultiscene(screen_size)
mouse_pos = [0, 0] mouse_pos = [0, 0]
clicked = False clicked = False
@ -20,7 +20,7 @@ for i in range(400):
scene.update() scene.update()
scene.update_mouse_events(pygame.mouse.get_pos(), pygame.mouse.get_pressed(3)[0]) scene.update_mouse_events(pygame.mouse.get_pos(), pygame.mouse.get_pressed(3)[0])
scene.progress() scene.progress()
# scene.save(f"Render/{i}.png", [800, 800]) scene.save(f"Render/{i}.png", [800, 800])
if i < 150: if i < 150:
screen_size[0] += 3 screen_size[0] += 3