{"id":106,"date":"2025-03-15T17:13:41","date_gmt":"2025-03-15T17:13:41","guid":{"rendered":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/?p=106"},"modified":"2025-03-16T01:47:36","modified_gmt":"2025-03-16T01:47:36","slug":"samuel-telanoff-status-report-3-15-25","status":"publish","type":"post","link":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/2025\/03\/15\/samuel-telanoff-status-report-3-15-25\/","title":{"rendered":"Samuel Telanoff Status Report 3\/15\/25"},"content":{"rendered":"<p>This week, I spent the majority of my time finishing up the physics simulation. I created the function simulate_shot, which takes the state of the board and a given shot&#8217;s angle, power, and spin and then simulates how that shot would play out on an actual pool table. I spent a lot of time researching how to calculate the inelastic collision when different balls collide, and I believe I have a pretty good implementation of it. I also added optimizations to the shot simulation code, including vectorization through NumPy and handling ball collisions with spacial hashing, to get the average runtime of a single shot simulation down to ~25ms from ~75ms.<\/p>\n<p>Additionally, I created a function simulate_shot_with_animation, that draws and simulates the shot onto a Matplotlib graph. This function and file take 5 consecutive shots with random power, angle, and spin and show the state of the board during and after each shot.\u00a0<span style=\"font-size: 1rem\">I used this testing method to get a visual cue of how my simulation is working. I also used the animation to fine-tune the parameters &#8212; like friction, power, and collision coefficients &#8212; until I found one that was pretty similar to the pool table we ordered. Attached are pictures of what the animation looks like.<\/span><\/p>\n<p>I will be spending my time this next week creating our greedy algorithm that chooses the best shot. I am currently on schedule and hope to be 100% done with implementing and testing this algorithm within 1-1.5 weeks so that we are ready to integrate and test MVP before carnival.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-medium wp-image-107\" src=\"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-content\/uploads\/sites\/376\/2025\/03\/Screenshot-2025-03-14-at-7.53.11\u202fPM-300x163.png\" alt=\"\" width=\"300\" height=\"163\" srcset=\"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-content\/uploads\/sites\/376\/2025\/03\/Screenshot-2025-03-14-at-7.53.11\u202fPM-300x163.png 300w, http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-content\/uploads\/sites\/376\/2025\/03\/Screenshot-2025-03-14-at-7.53.11\u202fPM-768x418.png 768w, http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-content\/uploads\/sites\/376\/2025\/03\/Screenshot-2025-03-14-at-7.53.11\u202fPM-1024x558.png 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/> <img decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-108 alignnone\" src=\"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-content\/uploads\/sites\/376\/2025\/03\/Screenshot-2025-03-14-at-7.53.39\u202fPM-300x167.png\" alt=\"\" width=\"300\" height=\"167\" srcset=\"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-content\/uploads\/sites\/376\/2025\/03\/Screenshot-2025-03-14-at-7.53.39\u202fPM-300x167.png 300w, http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-content\/uploads\/sites\/376\/2025\/03\/Screenshot-2025-03-14-at-7.53.39\u202fPM-768x428.png 768w, http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-content\/uploads\/sites\/376\/2025\/03\/Screenshot-2025-03-14-at-7.53.39\u202fPM-1024x570.png 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/> <img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-medium wp-image-109\" src=\"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-content\/uploads\/sites\/376\/2025\/03\/Screenshot-2025-03-14-at-7.54.24\u202fPM-300x164.png\" alt=\"\" width=\"300\" height=\"164\" srcset=\"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-content\/uploads\/sites\/376\/2025\/03\/Screenshot-2025-03-14-at-7.54.24\u202fPM-300x164.png 300w, http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-content\/uploads\/sites\/376\/2025\/03\/Screenshot-2025-03-14-at-7.54.24\u202fPM-768x420.png 768w, http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-content\/uploads\/sites\/376\/2025\/03\/Screenshot-2025-03-14-at-7.54.24\u202fPM-1024x559.png 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This week, I spent the majority of my time finishing up the physics simulation. I created the function simulate_shot, which takes the state of the board and a given shot&#8217;s angle, power, and spin and then simulates how that shot would play out on an actual pool table. I spent a lot of time researching &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/2025\/03\/15\/samuel-telanoff-status-report-3-15-25\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Samuel Telanoff Status Report 3\/15\/25&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1130,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-json\/wp\/v2\/posts\/106"}],"collection":[{"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-json\/wp\/v2\/users\/1130"}],"replies":[{"embeddable":true,"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-json\/wp\/v2\/comments?post=106"}],"version-history":[{"count":4,"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-json\/wp\/v2\/posts\/106\/revisions"}],"predecessor-version":[{"id":122,"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-json\/wp\/v2\/posts\/106\/revisions\/122"}],"wp:attachment":[{"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-json\/wp\/v2\/media?parent=106"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-json\/wp\/v2\/categories?post=106"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamf1\/wp-json\/wp\/v2\/tags?post=106"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}