add sensor class and changed volume logic

This commit is contained in:
garrett 2024-09-26 18:31:37 -04:00
parent b9b0f63d09
commit d49357eff7
2 changed files with 42 additions and 17 deletions

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)

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