add sensor class and changed volume logic

This commit is contained in:
garrett 2024-09-26 18:31:37 -04:00 committed by Haldrup-tech
parent 936b0522df
commit b64e2c1afc
2 changed files with 42 additions and 17 deletions

25
main.py
View File

@ -2,6 +2,7 @@ import pygame
import numpy as np import numpy as np
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
from particle import Particle from particle import Particle
from sensor import Sensor
pygame.init() pygame.init()
@ -12,8 +13,7 @@ SCREEN_HEIGHT = 600
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
sensor1 = pygame.Rect(200, 200, 50, 200) sensor = Sensor(width = 50, distance = 200, space = 200)
silica = Particle(speed = 1, size = 20, perm = 4) silica = Particle(speed = 1, size = 20, perm = 4)
@ -22,11 +22,12 @@ time_data = []
volume_data = [] volume_data = []
plt.ion() plt.ion()
fig, ax = plt.subplots() fig, ax = plt.subplots()
line, = ax.plot([], [], 'r-') line, = ax.plot([], [], 'r-')
ax.set_xlim(0, 1) ax.set_xlim(0, 400)
ax.set_ylim(0, 30000) ax.set_ylim(0, 40000)
ax.set_xlabel('Time (s)') ax.set_xlabel('Time (s)')
ax.set_ylabel('Volume') ax.set_ylabel('Volume')
ax.set_title('Volume/time') ax.set_title('Volume/time')
@ -45,7 +46,7 @@ while run:
screen.fill((0,0,0)) screen.fill((0,0,0))
pygame.draw.rect(screen, (255,0,0), sensor1) sensor.generate(SCREEN_WIDTH, SCREEN_HEIGHT, screen)
pygame.draw.circle(screen, (255, 255, 255), (distance - silica.size, 300), silica.size) pygame.draw.circle(screen, (255, 255, 255), (distance - silica.size, 300), silica.size)
@ -53,17 +54,7 @@ while run:
if event.type == pygame.QUIT: if event.type == pygame.QUIT:
run = False run = False
if silica.size >= abs(200 - (distance - silica.size)): volume = sensor.testSensor1(distance, silica)
pygame.draw.circle(screen, (0,255,0),(100, 100), 50)
volume = silica.partialVol(abs(200 - (distance - silica.size)))
elif silica.size >= abs(250 - (distance - silica.size)):
pygame.draw.circle(screen, (0,255,0),(100, 100), 50)
volume = silica.volume - silica.partialVol(abs(250 - (distance - silica.size)))
elif ((distance - silica.size) >= 200 and (distance - silica.size) <= 250):
pygame.draw.circle(screen, (0,255,0),(100, 100), 50)
volume = silica.volume
else:
volume = 0
time_data.append(time) time_data.append(time)
volume_data.append(volume) volume_data.append(volume)
@ -79,7 +70,7 @@ while run:
time = time + 1 time = time + 1
print(volume_data) print(volume)

34
sensor.py Normal file
View File

@ -0,0 +1,34 @@
import pygame
class Sensor:
def __init__(self, width, distance, space):
self.width = width
self.distance = distance
self.space = space
def generate(self, screenWidth, screenHeight, screen):
self.sensor1_x = (screenWidth / 2) - (self.space / 2)
self.sensor1_y = 0
self.sensor1_x_size = self.width
self.sensor1_y_size = (screenHeight / 2) - (self.distance / 2)
self.inner1 = self.sensor1_x
self.outer1 = self.inner1 + self.width
sensor1a = pygame.Rect(self.sensor1_x, self.sensor1_y, self.sensor1_x_size, self.sensor1_y_size)
sensor1b = pygame.Rect(self.sensor1_x, self.sensor1_y + self.sensor1_y_size + self.distance, self.sensor1_x_size, self.sensor1_y_size)
pygame.draw.rect(screen, (0, 0, 255), sensor1a)
pygame.draw.rect(screen, (0, 0, 255), sensor1b)
def testSensor1(self, partCenter, particle):
if particle.size >= abs(self.inner1 - (partCenter - particle.size)):
volume = particle.partialVol(particle.size - (self.inner1 - (partCenter - particle.size)))
return volume
elif particle.size >= abs(self.outer1 - (partCenter - particle.size)):
volume = particle.volume - particle.partialVol(particle.size - (self.outer1 - (partCenter - particle.size)))
return volume
elif ((partCenter - particle.size) >= self.inner1 and (partCenter - particle.size) <= self.outer1):
volume = particle.volume
return volume
else:
return 0