From cbe1c02d4bce60bac82f9ec607ef88a62080ffb4 Mon Sep 17 00:00:00 2001 From: Haldrup-tech Date: Tue, 12 Nov 2024 15:09:26 -0500 Subject: [PATCH] Started Volume Calculation --- __pycache__/particle.cpython-312.pyc | Bin 1460 -> 2158 bytes __pycache__/sensor.cpython-312.pyc | Bin 5976 -> 9341 bytes newMain.py | 7 ++- particle.py | 4 +- sensor.py | 71 +++++++++++++++++++++------ 5 files changed, 65 insertions(+), 17 deletions(-) diff --git a/__pycache__/particle.cpython-312.pyc b/__pycache__/particle.cpython-312.pyc index 0ae13976f31ad13473ee0183fc16c42d97eb491d..afa23f9d8e3a82570d536c763c2f64b83c3b7b0b 100644 GIT binary patch literal 2158 zcmah~O-vg{6rTO@Pfbi~113$SmIxYfQ*c`$BC60F;ua+cH);S8tLkdy9bnxxHnR(j zEhCwVh%1~35)xFZ6rvpB+!Co$dQ8=ew{3*A>80wS;#PsGO1ZS}?RpnCMeRs_``(+G zH*dc8&GYx+aEQQI+3%jcBM|Z{8txDq%26LEn?xZBr;)Vt< zg+d+jBuC%ak;+_|NZxdr2g^N+lp%hpg%I#H@&jD}3-{ZjEQ00U67FKySm0Fll(V8) zmf&pTW!F~)f1mkoysgTmnalxbz=5QYqqAYru8kA^J5C6;hAHD#_KW^;g>AbEO`Q-HvSZfjZ`T z8WU}&x05@gTcc*Q`|HeJ&;9dv&sP_IJU47chwatv9hKy*@gs;yG69s0fgszYn1bSO z0_-=rtUK5Ag_3zhIChsgyHq?2fSy)vtjqd6m!~LP zna6YOQ^8vnKTkq=0t!;tTV;6k$zlm#7+Eal3#05)1SI)M`PfP@OiE)#9?S$>B|mZ&fp=$cU(ylmLk zhC9NBnxnuZgR&)A1M+8Njang%&KQ!W=2XLKVe0IhYxwmHqjcW#&r$U1NClhDU0tjl zwJnKr{bd1IFFHtpqF=$zz3=0SuX2Biv>kC zpjVb?69&i5S8+ox2*AK?c(LuCo!+h9jl^!!jP~sfn$bkH$BYg^pBuApo{9&s%g#d+ zmLw}ANx8hTsG)vJk`@+a&6!~cFzZ2qHDG-p?h-qKQyCGxDDbCuf> Mc5)XE2?%@J-)1ks^Z)<= delta 747 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 t9Vt4-&zhr(tjC33Xh1J;tHT=LK3}{9kXwltcgk delta 702 zcma)3OK1~O6n*c_FOzmAjWlgjk}#b_>qw1_rKlK6{a`~E{m|+nigRA#q+xCF#V70>n7Vs)7Gr^`;R^~6~Le5pVB-XkjC@6UM9RaU} zKdNmScd*=K%fHjeNy8neQL=sN)JF$4;t6rxf@fMkEE&08Wmh{eIQwhn&3|N0ME*VJ zK_plFW7lof(`KZOt374!CqA;T1A7KB`WnxWG2%T4uw!Ps1L@ytsnyDj70-kZrmxjZ zvR*}pjcz2h7aYDsCt0 zc6#?MALK right_limit: self.distance = 0 pygame.draw.circle(screen, (255,225,255), (left_limit + self.distance, height / 2), self.size / (2 * scale)) diff --git a/sensor.py b/sensor.py index e3dec88..41f54cb 100644 --- a/sensor.py +++ b/sensor.py @@ -1,4 +1,5 @@ import pygame +import math class Sensor: def __init__(self, width, distance, space): @@ -14,9 +15,32 @@ class Sensor: center_y = screenHeight / 2 scaled_half_x = self.total_width / (2 * scale) scaled_half_y = self.total_height / (2 * scale) + scaled_width = self.width / scale + scaled_distance = self.distance / scale + scaled_space = self.space / scale + self.height = screenHeight + + self.scaled_sensor1_left_limit = center_x - scaled_space - scaled_width + self.scaled_sensor1_right_limit = center_x - scaled_space + self.scaled_sensor2_left_limit = center_x + scaled_space + self.scaled_sensor2_right_limit = center_x + scaled_space + scaled_width + self.right_limit = center_x + scaled_half_x self.left_limit = center_x - scaled_half_x + sensor1_rect_up = pygame.Rect(center_x - scaled_space - scaled_width, center_y - scaled_half_y, scaled_width, scaled_half_y - (scaled_distance / 2)) + sensor1_rect_down = pygame.Rect(center_x - scaled_space - scaled_width, center_y + (scaled_distance / 2), scaled_width, scaled_half_y - (scaled_distance / 2)) + sensor2_rect_up = pygame.Rect(center_x + scaled_space, center_y - scaled_half_y, scaled_width, scaled_half_y - (scaled_distance / 2)) + sensor2_rect_down = pygame.Rect(center_x + scaled_space, center_y + (scaled_distance / 2), scaled_width, scaled_half_y - (scaled_distance / 2)) + + pygame.draw.rect(screen, (0,200,0), sensor1_rect_up) + pygame.draw.rect(screen, (0,200,0), sensor1_rect_down) + pygame.draw.rect(screen, (0,200,0), sensor2_rect_up) + pygame.draw.rect(screen, (0,200,0), sensor2_rect_down) + + pygame.draw.line(screen, (100,100,50), (center_x - scaled_half_x, center_y - (scaled_distance / 2)), (center_x + scaled_half_x, center_y - (scaled_distance / 2))) + pygame.draw.line(screen, (100,100,50), (center_x - scaled_half_x, center_y + (scaled_distance / 2)), (center_x + scaled_half_x, center_y + (scaled_distance / 2))) + pygame.draw.line(screen, (255,255,255), (center_x - scaled_half_x, center_y - scaled_half_y), (center_x + scaled_half_x, center_y - scaled_half_y), 7) pygame.draw.line(screen, (255,255,255), (center_x + scaled_half_x, center_y - scaled_half_y), (center_x + scaled_half_x, center_y + scaled_half_y), 7) pygame.draw.line(screen, (255,255,255), (center_x + scaled_half_x, center_y + scaled_half_y), (center_x - scaled_half_x, center_y + scaled_half_y), 7) @@ -25,21 +49,40 @@ class Sensor: return 0 - def testSensor1(self, partCenter, particle): - if (particle.size >= abs(self.inner1 - (partCenter - particle.size))) and (particle.size >= abs(self.outer1 - (partCenter - particle.size))): - volume = ((particle.volume / 2) - (particle.partialVol(particle.size - ((partCenter - particle.size) - self.inner1)))) + ((particle.volume / 2) - particle.partialVol(particle.size - (self.outer1 - (partCenter - particle.size)))) - return volume - elif 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 + + def testSensor1(self, partCenter, particle, scale, screen): + particle_right_limit = particle.pixel_distance + (particle.radius / scale) + particle_left_limit = particle.pixel_distance - (particle.radius / scale) + + pygame.draw.line(screen, (0,0,0), (particle_left_limit, self.height), (particle_left_limit, 0)) + pygame.draw.line(screen, (0,100,0), (particle_right_limit, self.height), (particle_right_limit, 0)) + + pygame.draw.line(screen, (0,0,0), (self.scaled_sensor1_left_limit, self.height), (self.scaled_sensor1_left_limit, 0)) + pygame.draw.line(screen, (0,100,0), (self.scaled_sensor1_right_limit, self.height), (self.scaled_sensor1_right_limit, 0)) + + if (particle_right_limit >= self.scaled_sensor1_left_limit and particle_left_limit < self.scaled_sensor1_left_limit): + if (particle.pixel_distance < self.scaled_sensor1_left_limit): + height = particle_right_limit - self.scaled_sensor1_left_limit + volume = ((math.pi * height * height) / 3) * ((3 * (particle.radius / scale)) - height) + else: + height = self.scaled_sensor1_left_limit - particle.pixel_distance + volume = ((math.pi * height * height) / 3) * ((3 * (particle.radius / scale)) - height) + elif (particle_right_limit <= self.scaled_sensor1_right_limit and particle_left_limit >= self.scaled_sensor1_left_limit): + volume = particle.volume / scale + elif (particle_right_limit > self.scaled_sensor1_right_limit and particle_left_limit > self.scaled_sensor1_left_limit and particle_left_limit < self.scaled_sensor1_right_limit): + if (particle.pixel_distance > self.scaled_sensor1_right_limit): + height = particle.pixel_distance - self.scaled_sensor1_right_limit + volume = ((math.pi * height * height) / 3) * ((3 * (particle.radius / scale)) - height) + else: + height = self.scaled_sensor1_right_limit - particle_left_limit + volume = ((math.pi * height * height) / 3) * ((3 * (particle.radius / scale)) - height) else: - return 0 + volume = 0 + + + return volume * scale + + def testSensor2(self, partCenter, particle): if (particle.size >= abs(self.inner2 - (partCenter - particle.size))) and (particle.size >= abs(self.outer2 - (partCenter - particle.size))):