{ "cells": [ { "cell_type": "markdown", "id": "0b81e4ec-4596-4095-b752-0934796b14c5", "metadata": {}, "source": [ "# Snell's Law \n", "\n", "We are going to derive [Snell's Law based on the Principle of Least Time](https://www.physicslab.org/Document.aspx?doctype=3&filename=GeometricOptics_LeastTime.xml), using the `Equation` class.\n", "\n" ] }, { "cell_type": "markdown", "id": "0c99c632-9b18-48ec-ba16-021201b2452e", "metadata": {}, "source": [ "The following schematic (thanks to [https://www.physicslab.org](https://www.physicslab.org/Document.aspx?doctype=3&filename=GeometricOptics_LeastTime.xml)) illustrates the geometric quantities mentioned above.\n", "\n", "![image](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAF1AbsDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9U6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKy9Z8T6V4eltk1K+hsjcbvKMx2q2MZ56DqOvrWVWrToQdSrJRiurdl23fmXCEqj5YK78jUoqK2uobyFZbeaOeJukkTBlP4ipa0TUldEtW0Zl+J/EFv4X0G81O5/1duhYJnBduiqPckgfjXO/Cnx5J440KRrxUi1S1fZPGi7QQclGAycAjjr1U1zfxEuZfHGrf2VaNnTNOfM8o+7JPyNvvtGR9S3oKytItJvAOrW+sQ75LRf3F8ijJMTHh8eqnH5Ad6/I8ZxdOln0adN/7NC8Zvo2/il6Qas/JT8j6mjltOWCal/FlqvLsv+3v8j2+imQzR3MKSxOskUihkdTkMCMgg+lOZgqkkgAckntX64mmro+VtYWisWDxnod1rMelQara3GovuxbwyB2GASc4zjgHrW1WVKtSrJulJSs7OzvZ9tOpc6c6dudNX7hRRRWxAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUVgeP7m9tPA+vTabp0mr36WMxgsIZmied9hwiupDKT2KkH05ryr9nrRrvSfGHi949Ji0rRLm0sHgFl4auNBtZJwZxKVt5nZt4AjDN8uQF4xhjlz/vOS39a/5Ck+VJ/10/zPdKKKK1GFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV558cNEXVPCEd1s3vY3CS4HdSdhH0ywP8AwGvQ6yvFdol/4Y1a3k+7JayjPp8pwfw6142c4NZhluIwr+1FpettH8nZnbgqzw+Jp1V0a+7r+B5p4b8A2sFpHcQXN7Y3EgDGWynMZP19RXRHQNXmjMMnirUWtm4KCGNXI9N4+b8c1oeEoxL4Z0qQj5ntkJ/LH9K2hb5HUV+c5NkUI4SE4ykoyinaMpRWqvqoySe/W56+JxtR1ZKTu03uk9vVMwbXRLfTrOK1tYhDbxfdUcknuSe5NNlsFAYFVZWBVlYZDA9QR6VuSRCP7zBfqao3N3bRA75VH5mvTrZZhaEbtKKXorWOeFac3fVs5J9N1DQk8rStcvdPs2J22xiSZYyTnClgSBXP6z4fm1vI1LU9R1NCMGOeYrGf+ADgV2t9rGlhGD3aJjn5gR/Sq9jPp9/Oggu7ec5HyrIMn8K+SlQwtaosNCupR6Q9o2l5KHM0l5JWXQ9mnWqQXtHGz78qT++1/wATnfg14TtrfxvrupQ26RRWMSWMZTu5+aQn3GAM+hr2iuK+ENqI/Bq3Rx517dT3EpHdvMK/yUV2tfqHDGGhh8qouKtzrn/8D95L5JpfI+fzSrKri53fw+792n4u7CiiivqTygooooAKKKKACiiigAooooAKKKKACiiigArj/h34ouvE0vipbqRJP7N1y40+LYoG2NFjIB9T8x5rsK8b/Z01GW7vPiSs3SfxTd39tz962kIjjb6EwOaxlK04rvcTep7JRRRWwwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAK9/qFtpdpJc3lxHbW8Yy0srBVH4muHvtdu/iGslho6SWuhuSlzqcqlTMndIlPPPQk+/SuW8X+Ftds/Er6rr8c3ijQ1bMKW3H2QZPJh6Nx3z2ya65/G+mp4fgn0qeK5Mi7Y1j4EfH8S9Vx6Gvy/Ns+XLXjmEvq9Gmm5J/xJq9tHsoy29xybulzRZ9HSwkaMYVKP7yT2f2Yv8AO687ejNx7qz0OCC2BCrGgSOJeSFAwP8A9dSLetMuRhVPZa86t9QeeUySuZJGOWZjyTW/Y6iVUAOQPTNfJZLxos0qNKCp0vspbpdL/wCS0W2u5dXAOmrt3fU6C4UOeeSBWNqSgIamN+AvWsrUb8FTzX0WZ42hKi2KhSkpI5fXQNj1wt8xhn8xMB0YMD7112tXYfIzXGalKDuNfzJnc4VMR7vc/Qcvg1HU6fwL8Xl8EsbO6jafSJHL7FI8y3YnkjPBXPOPx69fdPDvijSvFdiLvSr2K8h4zsPzIT2ZeoP1r4x1klw5UEgd/StH4Y/Dnx7rmsxaj4dmm0S2Vvm1CVikZGeQB/H9AD71+s8FcW5phlDLvZuvBaJL4oryfZee3dI8jNsmwtVSxHP7OXVvZ+vn6fc2faVecafP4r8c3+tXmm+IotC0i11CbT7SGPT0naXyT5csju7dfOWVQAAAEHUk132mw3Fvp1rFeXAu7tIkWa4VAglcABm2j7uTk47Zrj/gkTJ8LtDuTy14st6x9WmleU/jlzX9LNubindaX/Lt6n5hJWdrh/wiXjT/AKH7/wAo0H+NH/CJeNP+h+/8o0H+NdzRV+zXn97/AMxWOG/4RLxp/wBD9/5RoP8AGj/hEvGn/Q/f+UaD/Gu5oo9mvP73/mFjhv8AhEvGn/Q/f+UaD/Gj/hEvGn/Q/f8AlGg/xruaKPZrz+9/5hY4b/hEvGn/AEP3/lGg/wAaP+ES8af9D9/5RoP8a7mij2a8/vf+YWOG/wCES8af9D9/5RoP8aP+ES8af9D9/wCUaD/GrnxH+JmkfCrS9P1XXxPb6Nc30NhcamuwW9gZTtjluGZgUiMhSPcA2GkUnC5YWvh745tPiT4SsvEenWl7aabfb3tDfxrG9xAGIjnVQxIjkUB03YYqykqpOKFTTu1fTzf+YNWtfr/X9f8ABRk/8Il40/6H7/yjQf40f8Il40/6H7/yjQf413NFHs15/e/8wscJJ4P8ayRsv/CwGTcCNy6PBke4561Xt/hLL4fbTm8L+IJ9Ce202HS5jJbR3P2qOEsY3fdj5wZJSWHXec9q9Dopeyj/AE2Fjhv+ES8af9D9/wCUaD/Gj/hEvGn/AEP3/lGg/wAa7min7Nef3v8AzCxw3/CJeNP+h+/8o0H+NH/CJeNP+h+/8o0H+NdzRR7Nef3v/MLHDf8ACJeNP+h+/wDKNB/jR/wiXjT/AKH7/wAo0H+NdzTIpo51LRusihipKEEAgkEfUEEH6UezXn97/wAwscT/AMIl40/6H7/yjQf40f8ACJeNP+h+/wDKNB/jXc0UezXn97/zCxw3/CJeNP8Aofv/ACjQf40f8Il40/6H7/yjQf413NFHs15/e/8AMLHDf8Il40/6H7/yjQf40f8ACJeNP+h+/wDKNB/jXc0UezXn97/zCxw3/CJeNP8Aofv/ACjQf41e+H+vajqcOs6brMkM2raLqDWM08EflrOhjSaKQJk7SYpY8jONwbGOg6uuH8OHyPi341tlACyWGmXhA7s32mIn8oFH4VLXJJW6+fkGx3FFFFbDCiiigAooooAKKKKACiiigAooooAKKKKACiiigArgfHngC2mtrrWdKRbPVIUaV1jGEuVAyVZemSOh9evt31YXjrVF0bwbrN2xAMdq4XP95htUfmRXg57gMFmOX1qOYQUqfK279LLdPo13O7BVatKvF0Xq2l636PueOQaipSOVOEkUOBnpntWlBqu0D5q8wsvFRUKm0MiqFHPStSPxCXHygDPvX8GYKviMul7ux+rTwLl0PQzrOF+9WbfayCCA2TXJHWnccuB7Cq82pkg/N+VfQ1c/r1YcruTTy5Rd2aGoX+/PP41zl5OJZVj3Y3EDNJeakADzXOXuriKZXz91ga8OMalefPLc9iFNU42R7v8ACT4W6drenw6/q0IuYmdha2bf6sBSVLOP4iSDwePrxj2uONYkVEUIijAVRgAeleY/s7eII9a+HiQK5Z7G4khbPXBO8H6fMR+FeoV/bHCGBwWDybDywkEueMXJ9XK2t31s7ry2Px/N61apjKkar+FtJdl0/D7wrE8E+GV8GeD9F0FLg3a6baRWgnZNpk2KF3EZOM4z1o8b3mp6f4L1+60WIz6xBp9xLZRKm8vOsbGNQv8AFlgBjvWvbs7wRtIMOVBYehxzX2Wjl/X9dDxSSiiiqAKKKKACiiigAooooA4j4sfDX/hbGhWfh691I2vhua7STWrBIdzapaqCfshfcPLjdwnmcNvQOnAckXPhd4Nvvh74G0zw5f67P4kOmq1vb6hdR7J2tgx8hJTubzHSPYjScFyu4gEmurooXuppdf6/r592D1tfp/X/AA/ey7KxRRRQAUUUUAFFFFABRRRQAVheDtPtdM028js71b6N9RvZnkTHySPcyO8fBPKMzL/wGt2sLwdHpsem3g0uSSSA6jemUy9RObmQzAcDgSbwPYDrWi+B/L9SH8S+f6G7RRRWZYUUUUAFFFFABXKWGgXtv8U9c1tlA0680bT7NG3DJlhnvHYY68LOnPTn2rq6wbXSbuLx3qWpteq9hNptrbR2W8kxyJLcM8m3oNwkQZ6nZz0FRJXaEb1FFFWMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvIP2ltVvIvB1npGn2813d6lcgeVChZmRBuOAO+4ofwr1+ivLzTBPMsFVwanyc6te19Hvpdbq6+Z14SusLXhWcb8rvb8vxPk3wh8E/GOqIkk2mpYo2Duv5Nn/joy36V30nwD1eC0d4r+wmnC5EHlMoJ9N//ANavdKK+Ao+G2Qxg41oym31cmreijZffc96rxHjZyvGyXa1/zv8AhY+L9UuZ9JvprW5ie2niYo8MnVGHUVTXVfOfBchRySK9d/ah8CM2mL4rsIz5tviO9VB95Oiv+H3T/wAB9K4H9mrwe/jfxQ2qXab9K0wiQhhxJL/AvuBgk/TB61+H4vgvEYfOVlNPXmfuy/uv7T9Fe/mmfdUc1pVMC8Y9LLVefb59PVHbaH8BNY13SYru6u7fSmlUOlvJCZHCkcbuRg+3P4dK5Xxj+zf4vtEeTT0tNUQdFt5dj49w2B+Wa+saK/dF4c5FGiqcYyUkviUnd+bTvH7kfCLiPHKbldNdrf0/xPl79mA674M8b6p4e1zTbvT1v4fMi+0RsoaSPnjPGNpbn6V9Q0UV9lkuV/2PhFg1U54ptq6tZPW2+ut3fTfY8jH4z69W9vy8raV/VdTG8aRarP4O12PQn8vXHsJ1sHyo23BjbyjluPvbevHrWrbhxBGJP9YFG7645rI8b6Zda14L1/T7G7Gn3t3p9xbwXbOUEEjxsquWHI2kg5HIxWfN8T/BukSGyvvGGg295b/u5Yp9ThR0YcEEFsg/WvehCc5PlTZ5cpRj8TsdXRXI/wDC4PAf/Q7eHP8AwbW//wAXR/wuDwH/ANDt4c/8G1v/APF1t7Cr/I/uZPtaf8y+866iuR/4XB4D/wCh28Of+Da3/wDi6P8AhcHgP/odvDn/AINrf/4uj2FX+R/cw9rT/mX3nXUVyP8AwuDwH/0O3hz/AMG1v/8AF0f8Lg8B/wDQ7eHP/Btb/wDxdHsKv8j+5h7Wn/MvvOuorkf+FweA/wDodvDn/g2t/wD4uj/hcHgP/odvDn/g2t//AIuj2FX+R/cw9rT/AJl951xOBXM/DLX7nxV8O/DWsXrrJeX2nwTzsi7QZGQFiB25zWJ4m+Mfg+Pw5qh07xXouoah9lkFtaWmowyzTS7TsRFViWYtgADuayPhh4z8OfD/AMGWXhfX/Euk6XquitLYy299fRQyFUkYRvtZgcNHsYH/AGq2WHn7Jtxd7rprazv+hi60faJc2ln19LfqesUVyP8AwuDwH/0O3hz/AMG1v/8AF0f8Lg8B/wDQ7eHP/Btb/wDxdY+wq/yP7mbe1p/zL7zrqK5H/hcHgP8A6Hbw5/4Nrf8A+Lo/4XB4D/6Hbw5/4Nrf/wCLo9hV/kf3MPa0/wCZfeddRXI/8Lg8B/8AQ7eHP/Btb/8AxdH/AAuDwH/0O3hz/wAG1v8A/F0ewq/yP7mHtaf8y+866iuR/wCFweA/+h28Of8Ag2t//i6P+FweA/8AodvDn/g2t/8A4uj2FX+R/cw9rT/mX3nXVheDrqwu9NvH062a0hXUb2ORHOd0y3Miyv1PDOGb8eg6Vnr8XvAjsFXxr4dZicADVYCSf++60PB2qprGmXU8dnHZImoXkASLpJsuJE8zoOX27z7t1PWh05wg+aLW36iU4ykuVpm7RRRWBsFFFFABRRRQAVzdppdnH8RdV1FL9H1CbSrO3ksABuiiSa5ZJTznDGSRen/LM/h0lc3aR6SPiLqskUsp106VZrcREfu1txNc+URx94uZgeegHA7xLdAdJRRRVgFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAVtS0631fT7myu4lmtbiNopY26MrDBH5VhfDvwBp3w28NRaNpu54lkeV5nADSMx6nHHAwPoK6aiuaWGoyrRxDiueKaT6pO11+H9XZqqs1TdJP3W7280FFFFdJkFFFFAHL/FS3trv4YeL4Ly4FpaS6PeJNcEZ8pDA4ZvwGT+FcX4I0LxL8LfB+jf2a03ivQRaRST6ZIVW+tmKhna3fhZVLFj5b4bk7XPCV2fxVs4dR+F/jC1uZxbW8+j3kUk5BIjVoHBbABPAOeAT7VvaSsaaXZrCcwiFAhxjK7Rj9KicVJWTs/Lfr8rahCXLO7V1YqeGvFWl+L9O+26TdrdQq5jkUqUkhkHWORGAZHHdWAI9K1q5LxR8PINa1D+2dLvJvD3iVFCrqlmoPmqOkc8Z+WaP2bkc7WU81V0z4gXOk6hBo/jK1i0bUZnEVtqELE6ffMegjkPMch/55SYP90yAE1iqrg7VdPPp/wPn8mzodNTV6X3df8Ag/1odvRRRXSc4UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAMmhS4heKVFkjdSrI4yGB4II9K4r4MT3j+AbS2vfvafPPpsbYOWjglaFCfU4TBPqK7iua8BaNf6FpWoW9/jfJq1/dQhWB/cy3UkqdPZxx2reMl7KS81+pk0/aJ+T/Q6WiiisDUKKKKACiiigArm7a80z/hYuoWiWbrrP9lW0s15n5Xg86cRx4z1VvNPT+Pqe3SVzsGrq/xCvdL/ALPjV4tLguTqAHzuGlmXyicdF2buv8Z49Yl0EzoqKKKsYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBieN7mxsvBev3GqWzXmmRafcSXVshwZYhGxdByOSuR1HWtLTHik061eBDHC0SFEP8K4GB+VZ/jXUV0fwdr1+1mmora2E85s5BlZwsbN5Z4PDYx0PWtDTZhcadayiMRB4kby16LkA4/Co+0Is1V1PS7PWtPnsdQtYb6yuEMctvcRh45FPUMp4Iq1RVNJqzKTtqjzwaJ4j+HL79CabxN4bX72i3c2b20Uf8+0zn94o/wCeUpz/AHXAAWur8MeLdK8YWDXWl3PnCN/LmhkUxzW8g6xyxsA0bj+6wBrYrlvFHgC112+XVrC6m0LxHEgSPVrIDeyjkRzIflmj6/K4OMkqVPNc/JKl/D1Xb/L/ACenodHPGr/E0ff/AD/zWvqdTRXCab4/vNBvINK8b2sOk3criK21e2J/s69YnCqGbmGQ/wDPOQ8k4Rn5ru61hUjU2/4KMp05Q3/4AUUUVoZhRRRQAUUUUAFFFFABRRRQAUUUUAFY3hnTbnS7S9W7uxdtLfXM6OHLbI3lZlTnptBAx0GK2a888ZeH9Pu/hdrent4eb4hWc17NLJosEsMTXDtfGRk3SuiDynJJyw/1R78Vd7Qf9dyH8SZ6EGBPBB+lLXzV8BvhxJpnxjuPFGi/DS3+G3hpdCn0y7SXU7e7nv7o3EEkJRIHlWJY1S5DnepkMsWVbylK/StZRd1e9/Q0egUUUVQgooooAKwodQ1RvHF3YvbY0RNOhmiufLPzXDSyh03dDhVjOP8Aa963awoYtYHji7ld/wDiQHToVhTK8XIllMhx977hi9uPrUy6AbtFFFUAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBleLLy/0/wrrN1pUH2nVILKaW0g2F/MmVGKLtHJywAxV6wklmsbd512TtGrSLjGGIGRj61R8WR6lN4V1lNGbZrDWUy2TZAxOUbyzk8fex14q9YLMtjbi4ObgRqJDx97Az+tT9oCeiiiqAKKKKAK+oafa6rZT2d7bRXlpOhjlt50DxyKeqsp4I9jXCPoHiH4cgSeGvM8Q+HkOX0C7m/wBJt1/6dJnOCB2ilOOyugAWvQ6KynTU9dn3W/8AXk9DWFRw03XZ7f157mL4W8YaX4xs5Z9NuCzwP5VzazIYri1k7xyxsAyN7EcjkZBBrarmPFPgGz8RXkep21xNoviGBNkGr2OFmC5zskBBWWPP8DgjuMHBGTZ/EG98M3sWmeOLWHTHkYR2+vWuf7Ou2JwFJOTbyE/wSEgnhXc8Vn7V09Kv39Pn2/Lz6F+zVTWl93X/AIP5+XU72sjwr4s0rxrpH9qaLdfbLH7RPa+b5bx/vYZnhlXDAH5ZI3XOMHGRkEGvE/2jfE2k6T8SfAmn+OPFd54K+HN1ZalPcapa67caJHNqUZtxbW8t3BJGygxPdOsfmAO0fRtmKyv2a/Gt34T+Enw+0+DTb/WbPXPEutWU2ram4tZ4B9uvZEeWFkVzM+zlNiAfOSVIVG6ormV+7t+LWvbVfc0+pzz938X8km3bvb89D6YooopAFFFFABRRRQAUUUUAFeS/GLwZdeMvgprui+F4n1J5tSW4udOkujbHUYY9TWa/sfM4CieNLi3GcKRLhjtJNetVwHjeDQtY+GWsw3vhO88VaQ13Is+hWcayTXMi3hDMqs6g4kBk5YcD8Kr7L0v+PfotX8ib2ktbee1vnseZfA3wM+nfFt9d8N/CyX4P+EU0Oey1HTZWtIDq1889vJbyi2tZJI/3CJdqZWKs32kAAhfl+jK+ZPgpoPhDSP2gd/hvwHrnw3u28MXIutP1eyiii1FPtdt5csLi4fDRHzFkEa8ieEyEbYQ303SblJ3le/W6afzTS/4axWltGreW3y1f5v8AQKKKKQBRRRQAVgw6Tdp47u9Ta9DWEumw2yWW85WRZZWaTb05DqM9fl9hW9XNx6XZL8Rp9RF+h1BtKjtzYYG5YhM7CXrnBJK9O1TLoB0lFFFUAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBmeJ7GfU/DWrWdrcC0ubi0miiuCxUROyEK+RyMEg5HpVe41W18F+C5NS1m8CWelWBuL28AaTCRR7pHwAWbhSeASfTNS+LrK31HwnrVpd3S2VrPZTxTXTYxCjRsGc+wBJ/CuL+MVvFafs4eNYIJhcQxeFL1EmXpIotHAb8RzXNXm6UJ1Fuk39xrRgqlSMH1aR6Fp9/BqlhbXlq/m21zGs0T4I3IwBBweRwR1qxXzj8HtEufAHxY8IaPb+IvEOr2Ou+B5dSvodb1aa8jN1DPaKssMbt5dvlbmQFIFjjwFwg2ivo6u+rBQem13+EnH80ctOfOtfL8YqX6hRRRWJqFFFFABUN5ZwahaTW11BHc20yGOSGZA6OpGCrA8EEdjU1FDVwTseet4a1z4dAy+FA2taEvLeG7qbEkI/6dJnPyj0hkOzsrRgYMN1o3g346S6RqFxNq4vvDl59oSyt9VvtLmsrnA4uIIZY9xwCAJQylWbblXOfSK5rxV4DsfE1zDqEcs+k67bKVttYsCEuIh12NkFZIyesbhlPXGQCOb2cqTTpbLp/k+n5eh0+0jVTVTd9f8APv8An3udLRXAweP73whcw6f45hhskkYRweIrVSNPuGJwBJkk2zn+65KEkBXJO0d6CCMjkHuK1hUjU23XTqjKdOUN9u/Ri0UUVoZhRRRQAUUUUAFeefELWreP4Wa3e3EniHRoIrp4ml8IWj3OpKVvNm6KJIpGYuRlsIcKzk9Nw9DryT48QeKdd+CWtw6Np+qXernUrdW0/RbkWd5d2CanH58UUxkTy2ltFkXeHUjeSDnFUknFpq/3fqmvvTXkyW7O97f13uvzXqjzb4EW7678fv7fsm+IuvaTbeGLqxfVviDYT2H2CZ7q1cQWsckUPmeesZaRvLbb9khAcbyD9SV81/s1L8TpPE1qPE+h+I/D3h7TdP1WxkHiXU4LqS9U6mJNI2COaU+ZBZGaKaVtrSM0e5pdgZfpSptGPuxVrdNPyUYpfKKvvu7lX5tea/nq/wAXKV//AAJ9tLWCiiigAooooAK5uOPSR8Rp5Fll/t06VGrxYPli3859rdPvb9w69O1dJXNx3mmH4jT2gs3GsjSo5WvM/KYDM4WPGeoYMenfrUS6AdJRRRVgFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAZPi5LGTwnrS6m7x6a1lOLp4vvLF5bbyODztz2qxoa266Lp4s2Z7QW8YhZ+pTaNpPvjFV/F1xZ2nhPWp9Qga60+Kyne4gU4MkQjYuo5HJGR1HWrGhywT6Lp8lrGYbZ7eNoo26ohUbR+AxUfaAvUUUVYBRRRQAUUUUAFFFFABRRRQBHc20V5byQTxJPBIpR4pFDK6nggg8Ee1cEfCes/D0+d4PxqOiry/hi6l2iMd/scrf6v2if930CmIZNeg0VlOmp67Pv1/ry2NYVHDTddun9fiYHhPxvpXjKK4FjLJHeWjBLvT7qMxXVq5/hkjbkZ7HlWHKkjmt+ub8VeA9O8UzwXpabTNbtVK2usWDCO6gBOSoYgh0J6xuGQ91PFYkPjvUPBUqWfjlIYLZmCQeJbVStlKScATqSTbOf9omMno4J2jP2kqelXbv0+fb8vPoaezVTWlv26/Lv+fl1O/opFcOoZSGUjIIOQRS10nMFFeX/tI+NdS8C/C6W70iDUJ9QvtS07SYxpTwJdgXN3FAxhadliWTbIwVnYKGKkmuJ+C/j6Twt418a+Gtc03xN4N8OaTpFlriD4ga7BqFxbLLJcxyt9sF7dEwk24IEsoKHfgBSuCPvXt6fNK7/B3CXuq/p9zdl+Oh9DVzWpeELTxr4UvtD8WWMOq2F1cymS1n5R4luC8GceirGfw5rpAQwBByD3FY/hnTbnTYtRW6uxdtNfzzxkOW8uNmyqc9MDjHSrXwsl7o8/8A+GUPhF/0IWk/98N/8VXrNFFTe5QUUUUgCiiigArnY9XVviFPpf8AZ8YddLjuf7Qx87AzOvlZx0GN3Xv0roqwk1DVD44msTbY0RdOSZbnyzzcGVgybun3Qpx71MugG7RRRVAFFFFABRRRQAUUUUAFFFFABRRRQAUUUEZFAFPT9YsNWe7Wxvba8aznNtcrbyrIYJgATG+CdrAMpKnnDD1q5Xw/HLYfDLSPjpa+H/E2tWHiKDxhbDWI5PEF5eXum6FO9j9o1BIJpJfLxA87C6CZCpnfiMYd4k8fR6L4U+LE3w3+IOv618PbGPQJrXxHaa1ca81nqEl8EvIbS8led5v3At2aHMihpCNvzlSou8Iz7pP5tJ/dra/dNdB2fM12bXr71l8+tv5dT7eor57/AGdfEel6r8T/AB5ZeB/Fl941+HNtZac8WpXWuT61DDqjGf7TBDdzSyscRC1dogxVC44UsQfOdX0vWdYgfxA3jrxlaajL8UZvDiiz12eK3i02S9eB7ZbcHyj8rsVlZGljO3ZIgSMK0r1I01u/1lGK/GS+WvkTJqMJTey/+RcvyTXrp5n2VRXwt4z8Z+KfBnh/xT4bt9evpfBujfEtdHvNU1/xZfae9lpj6XDdpHcayqTXMERu5UTzSc4dIi6q2RtQeML2y+D/AINPiH4i6fN8PL3xrPbap4n8L+NrnUV07TDBNLb202thYZgBdCGFpWKNsaNGcliSL3lddeV/+BKLXz95aa7PyvUlyuz/AL3/AJLzf/Iv7152+prH4peE9Qvby0j120hubXV/7AeO6Y25fUPKWX7PH5gXzX8tgwCbsgHHQ46mviX4Rav/AGVJOnhrxDq99pF78YTbR31zdyvLfWZ0lWQPK2GuIyFQrI5bzAqOWcneZ/gv8bJvEb/s5+F28ZXup+LbWTULTxdp5vpZbmG4isbkeVqAySsnmxllSb5m8tmUEKSFF80ObqlH8YRk/uv8tPVzJ8rl2V/wlKK/9J/rY+06K+K/h94Y1PxJZfAu81Hx746mm8ZQ30GvBPE13Gt3DHbvNEiKjgW7I0MY82Dy5WXdvkcu5b3X9lHXdT134M2p1bUbvV7mw1fV9KS9v5TNcSwWuo3NvCZZG+aR/LiQF2yWIJJJJNUlp/X9f0/mN2++34N/o/w87ev0UUUhmV4svxpfhbWb1rVL5baymmNrIMrMFQnYeDwcY6HrVjRLkXmjWFwIVtxLbxuIV6R5UHaPp0pNeuLq00PUZ7GPzr2K3keCPaW3yBSVGO+TjijQbi6u9D06e+j8m9lt43nj2ldkhUFhjtg54qftAXqKKKoAooooAKKK8of9o7wro4lj128SC+l1TUNNsLDRbW+1O5vDaSKkoSGO1EjSqGDNHGrgAOyu6IzBXV7eV/lov1Q7O1/l+Df5Jnq9FeLax+1X4UtNa+G8GlW2r+IdK8bCV7bVNM0e/uEhRI3YZWO3f596FXjYo8Q3M4UKa6iL49eCJ/HS+EU1S5OrvetpqTHTLsWD3ixmVrZb3yvszTBVYmISFwVYYyCBVteXr/lv9xN1a56DRXgXxi/a48NeCfA/ji78M/b/ABB4h8PJPaskHh7Uruxtr5G8vyrmeGAohVirFDIrFCrAhXVq6H/hoLw94H8MaNL431qd9Tnslvry6sfCep2kNpA7sqT3UDLM+nxnaw3XTqP3chyArBUveV11tbzv2G1Z2+/y6HrlFcNqvxr8IaN41i8K3GoXTauzQJI1tpt1PaWzznECXF1HE0EDyHG1JZFZtyYB3rmv4P8Aj14I8eeJ/wCwNF1S5n1B455bZ59Mu7a2vo4XWOZ7S4liWG6VWZctC7jDA5wc0L3tvP8ADf7uoPTX+tdvvPQajngjuoJIZo0lhkUo8cihlZSMEEHqCO1SUUAefHwZq3w/Jn8FFLnSRkyeF7yXbCo6n7JIc+Qf+mZzGegEfLV0PhXxxpfi9Z47VpbbULUhbvTL1PKurVj0EkZ5wezDKt1ViOa6Cuc8WeAtM8XPb3UxmsNXtAfsmr2D+VdW2eoV8EFT3RgyN3U1zezlS1pbdv8ALt6bem50+0jU0q79/wDPv+frsS+OvBOmfETwpf8Ah/V1lNleKv7y3kMc0MiMHjljccrIjqjq3ZlB7V5p4p+Bl9bfDnxjaaZNH8QPGfiGGOGXVfG91FbbggKwnda2ZRBBuZ0VIBlySWDMXrqo/G2p+B5VtfGyRGwJCQ+J7RCtq3oLlMk27f7WTGf7ykha71HWVFdGDowBDKcgj1rSFRTvbR9V1X9d1v3M5QlTs3t0fT+vJ/NFTRGvn0exbVLe3tNSMCG5t7S4aeGOXaNypIyIXUHIDFFJHO0dKz/Cmn2un/2x9lvVvPP1GaaXbj91I2N0Z56jA/Ota1v7a+acW9xFOYJDDKI3DeW4AJVsdCARx71k+FI9Nj/tj+zZJJN2ozG58z+GfjeBwOOldSlzRk0czjyuKN2iiisjQKKKKACiiigArC8rWP8AhOPM3/8AFP8A9nbdmV/4+fNznH3vufhW7WD/AGTef8J3/af20fYP7N+zfYt5z5nm7vM29OnGetTLoBvUUUVQBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXO+P/A1h8RvC82halLcwWks9vcM9oyrIGhnSZACysMFo1B46E4wea6KijcAooooAKKKKACiiigAooryR/BPxcZyV+JWnKpPA/sGM4H/AH1W1KnGpe81H1v+iZlUm4WtFv0t+rR63RXkf/CEfF3/AKKXp3/ghj/+Ko/4Qj4u/wDRS9O/8EMf/wAVW/1eH/P2P/k3/wAiZe3l/wA+5f8Akv8Amena8l5Joeorpx26g1vILZsgYl2nZ146460aCl5HoenLqJ3agtvGLlsg5l2jf04656V5RqngH4vXWmXcP/CzdOXzIXTcNFSPGVIzuDZX6jpRpfgH4vWumWkP/CzdOby4UTcdFSTOFAzuLZb6nrUfV4c38WP/AJN/8iHtpf8APuX4f5nstFeR/wDCEfF3/openf8Aghj/APiqP+EI+Lv/AEUvTv8AwQx//FVf1eH/AD9j/wCTf/Ih7eX/AD7l/wCS/wCZ65RXkf8AwhHxd/6KXp3/AIIY/wD4qj/hCPi7/wBFL07/AMEMf/xVH1eH/P2P/k3/AMiHt5f8+5f+S/5nrleHeC/gdrvhz4k6Z4gubvTnsrXVfEd88cUkhkMeoTRPAACgG5RG2/nAJGC1av8AwhHxd/6KXp3/AIIY/wD4qg+DfjBB8yfEPSLlv+ec2iKin8VOaSw0FLmVWN7Nfa6tP+XyQOvNqzpy3v07Nd/NnL6R8DvGPg+w+Hs+kDQdQ1Dw34k1nULizur2a2gks76S7I8uVYJCJY1njOwx7SQw3gYY4fg/9l/V/CnxDMl5plv4k8Nx+JrjxFaajcePtatmtWluXul/4k4R7N3ikkZQ3mKHADkKxIr0T/hGvjP/ANDl4c/8Fbf40f8ACNfGf/ocvDn/AIK2/wAapYeMZKXtY3Xr5eXdeonWbi4ezlZ+nn59m1bbyMrV/gbr2ofBf4keEY7vThqXiTV9R1C0laSTyY47i581BIdmQwXggAjPQnrXMftS/AP4ifGmfXrDRdVtZPD+p6A2m2ltc+J9S0ePTrpjL5s8lvZxsmoLIrQrsnYKgjbCtvYHvP8AhGvjP/0OXhz/AMFbf40f8I18Z/8AocvDn/grb/Go+qwSjH2sbRSXXZK3bsWsTKMpSVOV279N783fv+Ghk+GPhl4+8C+MvE0Okr4dvvCviq9tNQvr69vrmO+sGWzgtbiKKBYSkwZLZSjmaLYZDlHCANy/7Pv7NGs/CnWvC8GuaXa6tbeF7WSz07xEfHutXjsPLMKyLpFwjW1sXj4ZY5WCZITIwB33/CNfGf8A6HLw5/4K2/xo/wCEa+M//Q5eHP8AwVt/jWioJNv2se3XZKyW3Rf8G5n7V8qj7OVl6f59ev4WPXKK8j/4Rr4z/wDQ5eHP/BW3+NH/AAjXxn/6HLw5/wCCtv8AGp+rR/5+x/H/ACK9vL/n3L8P8z1yivI/+Ea+M/8A0OXhz/wVt/jR/wAI18Z/+hy8Of8Agrb/ABo+rR/5+x/H/IPby/59y/D/ADPWpI0mjaORVdHBVlYZBB6givnj48+LE/Zd8Hy6z4Y1KO0jvnNva+GLpDLbCUg5ltxkGEJwzIMxnGAqs26utGi/Gy3O2PxH4Su1PO+exmQg+mFOMV5x8Uv2afHHxkvba88Uz+E727tYjDBLHJfxCNSSThFcJkk5J25OBkkAVwY7A1KtF/V6kOfo22rfh+Gz6ndg8ZTp1V7eEuTqkk7/AI/jv2PC/wBij9oC68M/E+70HxDfyT6f4quC5uLh8lL9j8rkn/npnafUlPSvvrwpdafdf2x9gtmtvL1GaO43HPmTDG5xyeDx+XSviu5/4J2+IJLgTW+v6RZMp3KIZJyFOcggshP617D4E1r4v3mr6x4Zi1Xwqmo6P5fn3F3ZTK18DuTzwVwGJaNgxwOccYIrzclwOKwdGWHxc42v7r5r73bT0v5o9DN8ZhsZVWIwsZXt7ytbsk97eTPpCivI/wCzfjf/ANBnwX/4C3P+NH9m/G//AKDPgv8A8Bbn/Gvofqy/5+R+9/5Hg+3f8kvu/wCCeuUV5H/Zvxv/AOgz4L/8Bbn/ABo/s343/wDQZ8F/+Atz/jR9WX/PyP3v/IPbv+SX3f8ABPXKK8j/ALN+N/8A0GfBf/gLc/40f2b8b/8AoM+C/wDwFuf8aPqy/wCfkfvf+Qe3f8kvu/4J65XN/wBl2f8Awsb+0ft6f2h/ZX2f7Bxu8rzt3m9c4z8vSuH/ALN+N/8A0GfBf/gLc/41zYh+MK/EXeJ/ADa6NK27GF+ENt533jxjdv8Af8KiWFTt+8j9/wDwBfWP7kvu/wCCfQFFeR/8X4/6p1/5P0f8X4/6p1/5P1f1X/p5H7x+3/uS+49coryP/i/H/VOv/J+j/i/H/VOv/J+j6r/08j94e3/uS+49coryP/i/H/VOv/J+j/i/H/VOv/J+j6r/ANPI/eHt/wC5L7j1yivI/wDi/H/VOv8Ayfo/4vx/1Tr/AMn6Pqv/AE8j94e3/uS+49coryP/AIvx/wBU6/8AJ+tXwr/wtz+37T/hJP8AhCv7Ey32j+yvtf2nG07dm/5fvbc57ZpSw3Km+eP3jVe7tyv7j0eiiiuM6SncaxYWupWmnzXttDqF2sj29pJKqyzKmN5RCcsF3LkgcbhnrVyvAvjrZ3eq/Hv4QabY+K5PB91e2utxJf2sVvJdviO2cx24uEeLeQhJLRyfIsmFBw68Z4B+K3jf4nXPgTwZL42l0SW9PiIz+MNJsrM3WsLpl8lrD5KTxSQIZVl85ysTD92QmwE4UW5aLfX8L3/BevYbVlf+utvyfl3PrCivjLRtT8TfFXxV8DdT1Hx/qdtd22veINGF/pFrYJDqa2aXcS3gWW2kAaeOIBwhCYZjGqHBEui6t4k+Evhb4x6vY+OdR1C7ufiBBoYuNZtrBrfTTdSWEDX7LFBCWdEnztZvLOxMpyxZx96fIuquv/AopffzL0621tDfL99vwk393L8+jez+yKK+UvGXxI8ffDa4+JXhax8cy+J73R4PD99Ya7rWnWjXFlJe3xt5bWeO2igikTZGJFAVHxMfm+6y5PxJ8VfFL4c2Xxjubf4qanqcHw+0y08QWKXuj6b5t+ZIneS0unjt1Uwf6OwUxJFKPObMjbVAFqWk2+Xr29VdeWz/AMz7Dorx34p6v4p1T4k/DzwtoPim48JWOu2WpXGoXVjZ21xc/uVt2j8k3EciI26QglkcFWYbdxV08p+HXxO+JNhc/CTWNd8ZzeKYvFWpatoF7o/9l2ltb/6HBePFcxmOMSid2sfnBkMRMzbY4wFAlySTb6X/AAJTUknHqr/I+uKpXut6dpt/YWV3f2tre6g7x2dtNMqSXLKhdljUnLkKpYgZwAT0FfLX7OPxQ+LvxBn8K+MNQ07xJf8AhPX9Lub7UU1IaEmm2cjIJLddPNpM14QrBoStyGYhgzFGUg854O8Ra74z8e/szeL9d8et4gn8WDUdX/4R+W2s449NZtMmZo7Ywokhjj8wRP5xlYsqHch3BrcXG991v5b6evuv9Qbsm10/4H+f+R9q0V8efBL4w6tpGgy2V1qem6LoWn/C+HxDb28Nla2Vtb3Iur1JZlVI1VVCpBlfuDg4BY5u6b48+JHxC0PSRa/EG78MyL8MNP8AFM91p+l2Ms1xqMgmyzedC6CJtuXjVAThNjx4YPm5xUXLpr+HtL/+m5fh8tHBqfJ10/Hk/wDlkfx+f1tRXzf8GfiB43uPiX4IsvEfihvEVl418ESeKJLNrC3todLuY5bQeXamNBIYmW8xiZ5WBiBD8kV9IVtODh8Xn+DcX+KZjCanqvL8UmvwZm+JbWG+8OarbXNwLS3mtJY5LhukSlCCx+gOfwo8NWsNj4c0q2trgXdvDaRRx3C9JVCABh9QM/jTvEMNrcaBqcV6zpZPbSrO0f3hGUIYj3xmo/CzWTeGNIOmu8mnGzhNs8gwzRbBsJ4HO3FY/aLNSiiirAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAryrxZe6jo2r2/jO8g+zQ6JqkmnXDBCvm6VOIlaQ56iOURy7uyxuB1Neq1z1lpF1q1j4h0/X0W6sL24mhihcqQ1o8artOOxy/XnmpqQ9pTklvpb1T0Kpz5KkW9uvp1OhorivhPqdzJ4cl0TUpmm1fw9cNpV1JJ96YIAYZj7yQtE5PqzDtXa1NOaqRUl1KqQdOTiwooorQzCiiigArm3vNMT4jR2n2N/7Zk0p5ReZ+UQLMoMeM9dzA9PxrpK52TV1X4hQaX/Z8ZdtLkuf7Qx86gTIvlZx0Od3Xt0qJdAOioooqwCiiigAooooAKKKKACiiigAooooA5/xf8PfC3xBsxaeKfDWj+JbUI0Yg1iwiu0ClkYrtkUjBaOMkeqKewqrr3wn8EeKfCth4Y1rwd4f1fw3p/l/Y9Gv9Lgns7by0KR+XCyFE2qSowBgEgcV1VFFtLDuznNX+G/hLxBoel6LqnhbRdS0fSpIpdP0+70+GW3s3iXbE0UbKVjKAkKVA2g4GKSf4a+EbnVNc1KXwrokuo67bCy1a8fToTNqNuF2CK4crmVNvy7XJGOMYrpKKHrv/V9xLTb+upyug/CjwT4V8OS+H9F8HaBo+gyzi6k0qw0uCC1eYFWEhiRQpcFEIbGcovoK0tS8G6BrMWrx3+h6bfR6xCttqSXNpHIL2JQwWOYEHzFAZgFbIAY+prYopt3BabFObRdPuNQs7+WxtpL6zR47a6eFTLAr7d6o2MqG2rkDGdoz0FUoPBfh+1XTBDoWmRDS55LqwCWca/ZJpA4kkiwvyOwlkDMuCfMbP3jnZopBY5DR/g74C8PeL7rxXpfgjw5pvii6aR59bs9Jt4r2ZpDmQvOqB2LHliTz3qTR/hN4H8O63caxpXg3w/pmr3N019PqFnpcEVxLcMrq0zSKgZpCssgLE5IkYZ+Y56uihaafIHruchqfwe8Ba2uhrqPgjw5fjQju0kXWk28n9nnIbNvuQ+Ucqp+THKj0rWs/Bnh/TkVLXQtNtkWxTTFWG0jQC0TOy3GB/qhuOE+6MnA5rZootpYL63Mq08J6JYXmn3Vto+n211p1odPs54bVFe2tiUJgjYDKRkxx5RcD5F4+UY1aKKbbe4krFHXJYINF1CS6jM1slvI0sa9XQKdw/EZqv4RuLO78J6LPp8DWuny2UD28DHJjiMalFPJ5AwOp6VZ1u5Fno1/cGFbgRW8jmFukmFJ2n69Kr+E78ap4W0a9W1SxW5soZhaxjCwhkB2DgcDOOg6Vn9oZq0UUVYBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFY3h3TbnTpdYa5uxdC5v3nhAct5UZVAE56YIJwOOa2a4HVfEOn/AA08PeI9Xhdtbnn1ZUSxt2RHe8naGGK2DMdoJdoxuJGA2TwKtO0X/XUhq8kJrv8AxSHxQ0jWR8mneIYxo96ey3KbpLSQ+mQZoie5eIdhXf15VFqmq/E7SvE3gnxRpdn4X8X2ltBexDTNRe/tlDszWt1DO8ELEpNAcqY1KtGOoIJ7XwF4oPjHwlp+qSRC2u5FaK7tv+fe5jYxzRf8BkV1/CuSC9nUcOj1X6/jr6tnXN89NS6rR/mvw/BI6Ciiiug5wooooAKwn1DVB44hsRbZ0RtOeZrnyzxcCVQqbun3Sxx7Vu1hPFrB8cQyq/8AxT4051dMr/x8+apU4+99zd7VMugG7RRRVAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAVNWmuLfSr2W0TzbqOF2iTGdzhSVGO/OKg8NXV7feHNKudSi+z6jNaRSXMO0rslKAuuD0w2Rip9WW5fSr1bI7bwwuITxw+07evHXFQeGo7+Lw5pSaq2/VFtIhdtkHM2wbzxx97PTip+0BpUUUVQBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFeK/Gb4X2PxU+GfirQtIsrXXbyHXbXVJ9J1dVNre3FvLb3DWj71K7JY0EeSCAZMnOCK9qrC8M3Vhc3niBbG2a3kh1Fo7pmP8ArZvJiJccnjaUHb7vSrSvF+Vn8001+JLdpL5/kfMS+E/D3wR0bx98SJdKT9m7SNRttM0izsNGg0W3uzLHNKRJLhbiyVppLkRbmJCxx73aMZKevfCrVLnS9Z0+G91Ww1qDxbpFvrMOp6W6vZ3N9HDFHdtCy/KUkXyZlxgN+9YDrXrlcZ8VdIurvw0mq6ZC0+taDOuq2UafelaMESQj/rpE0sf/AAMVzVm1DmWrTTXok7r53fle2mh0UbOfK/tKz/Cz+Vl8rnZ0VzesfEXw9oHgRvGV/qSQeHFtUvftgRpN0bgFNiICzs25QqKCzFgACSBXF/Cz45QfFT4meNNE02ORNJ0Kx02ZVvtNutPv455zc+Yk8NwqSJ8sUTKDGpKybssGU1rFqXwmMk47nrFFFFMArBk0m8PjuHUxegWC6bJbGy3nLSGVGEm3pwARnrzW9XN3Gl2b/EWx1Fr9F1CPSri3SwwNzxNNCzS9c4Uoq9P46mXQTOkoooqhhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFfUIXuLC5ijfy5HjZVcnG0kEA5qh4Q0+50jwnotjeXQvru1soIZrpXLiZ1jUM+48nJBOTzzV7U4kn066jkkEUbxOrSH+EEHJ/Cs3wRYW2leC9AsrK8XULO20+3hgu0xieNY1CyDBPDAA/jU/aEbdFFFUMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArE8N6muo3evItklp9l1AwF0H+vPlRN5h4HPzbe/3RzW3WRoN7qF3dayt/B5McF8YrRthXzIfKjIbnr8zOM+3tWkfhZD3Rr0UUVmWeBeK/h/qXiLwz4i+HWkXNrZ6roerWHifw99vLrbSwpeJdxwSFMsIxNBLCSoYohjba3CnD8VeFvFuhWnxI8c+OdLkuZtcstKsrLQfh1qOsSXVvJbzXAXfdWcUd08ebhJHkiiBCb18p9gMvrfxOH/CN3+heNY/lTSJjbaiR/FYTlVlY+0biKY+ixP6131ctFcilR6J3+Tt+it/27fvfqqvn5avff1XT8b/ADOf+HzvJ4E8PGW7vb+UafAHu9RtJrS4mYRgF5IZgJI2Y5JVxuBODzXQUUV2SlzSb7nHFcqSCubuI9JPxFsZHllGujSrhYogD5Zt/Oh8xjx94OIwOehPFdJXN3F5pi/EWxtHs3bWX0q4ljvM/KsAmhDx4z1LNGen8PWspDZ0lFeRfED9oBPh3rXjjTdQ0CWSbQ9Ct9b0ry7n/kNGWR4fs6ZT5JFnEMZ5b/j4jPGcV6rp8txPYW0l3AtrdvErTQJJ5ixuQNyhsDcAcjOBnHQVa1V1/W6/NO/bqN6O39bJ/k1bv06liiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAK2piJtOuhcErAYn8wr1C4OcfhWb4ITTovBegJpEkkukrp9uLOSb77Q+WvlluByVxngVpam8UenXTzoZIVicug/iXByPyrN8EXNje+C9AuNLtms9Ml0+3ktbZzkxRGNSiHk8hcDqelR9oRt0UUVYwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACsjQY9UjutZOotuia+LWQypxB5UYA4/wBsSdef0rXrG0DTbmwv9eluLsXMd3fieCMOW8iPyIU2YPT5kZsDj589SauOz/rqRLdGzRRRUFlbUtOttY066sLyFbi0uongmhfo6MCrKfYgkVyfwo1G5bw7NoWoytNq3h24bSrmR/vTKgBgmP8A10haJz/tMw7V2tcDr5/4RH4m6PrQ+TTtfQaNfY6LcLuktJD9czRE9zJEO1c1X3JRqfJ+j/ydvlc6KXvxlT+a9V/mr/Ox31FFFdJzhXOz6uqfEKy0v+z42eXS57kagR86BZYV8oHHRt+7r/AOPToqwrnUNUj8cafYx227RJdOuZp7nyydlwssAiTd0GVeY477PY1MgZ5h8bPg3cfE/wCMPwf1UWUv9leG7+61DUr6O5VEaNEjeC2ePcGkDXUdvMOCqm1ycErXtlFFUtFyra7fzf8AwyB6u77W/P8AzYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBFdsFtZiUEgCMSjDIbjoax/AmrDXvA/h7U1sk01b3Tre5FlH923DxK3ljgcLnHQdOgrZuGdIJGjGXCkqPU44rK8F32pan4O0K81m3+yavcWEEt7b7CnlTtGpkXaeRhiRg9MVP2gNmiiiqAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArC8N6fa2OpeJJLe9W6kutRE1xGuP8AR5Ps0CeWeeu1Ebt98Vu1heG49NTUvEhsJJHnbUQb4SdEn+zQDC8dPLER78k1pHaX9dURLdf10N2iiisywrC8c+F18ZeE9S0gym2luI8wXIGTbzqQ8Uo90kVGHutbtFTKKnFxlsyoycJKS3Rz3gDxQ3jDwlp+pzQi2vWVoby2Bz5FzGxjmj/4DIrj8M10NcDpP/FI/FPUtMPy6d4liOp2o7JdxBY7lB6bk8mQDuRKfWu+rKjJyjaW60f9ee/zNK0VGV47PVf15bfIKwrmHWD4406WJ8aAunXK3KZXm5MsBhOPvfcE/TjnntW7WDdaTdy+O9N1Nb1UsIdNuraSy3kGSR5bdkk29DtEbjPUb+OprWWxib1FFFUAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBHcBzBII/9YVO3644rK8FxarB4O0KPXX8zXEsIFv3yp3XAjXzTlePvbunHpWrcIZLeRVbazKQG9DjrWR4I0y60XwXoGn312NQvbTT7e3nu1cuJ5EjVWcMeTuIJyeTmp+0Bt0UUVQBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFYXhu6sLnUvEiWVs1vNDqIjvHY/wCum+zQNvHJ42NGvb7p47ndrD8PavDqOreJbaKzS1bT9QS2klQjNwxtbeXzDwMHEoTnPCDnsNIq6l6fqiJbr+uhuUUUVmWFFFFAHHfFTSLu98MrqelwmfW9DnXVbGNfvSvGDvhH/XWJpYv+2me1dJousWniHR7HVLCYT2N7AlxBKvR0dQyn8iKu1wPw5P8AwjOueIfBr/LDZTf2lpgPQ2VwzNsH/XOYTIB2Ty/UVzP3KqfSWnzW34X+5HQvfpNdY6/J7/jb72d9XN3el2cnxF0rUXv0TUIdKvLeOwIG6WJ5rZnlHOcKY416f8tB+PSVzt5DpA+IWkSzTyLrx0u9W1gAOx7bzbUzsTjGQ5twMkH5zgHBxtLb7jnZ0VFFFWAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBHPF58Ekecb1K59MisTwBptpo3gTw3p+n38eq2FppttBb38JBS5jWJVWVSCQQwAYYJHPU1v1zfw1ttJs/hz4Vg0C6lvtCi0q1TT7qcESTW4hUROwKrhim0n5Ryeg6VD+Jf12A6SiiirAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArI0TUb++1PxBDeWv2e3s75YLKTy2Xz4TbQSF8k4b95JKuV4+THUGtesjRP7V/tPxB/aP/Hn9uX+zfuf8e/2aDd93n/Xef8Ae5/DbVx2l6fqtv62Iluv66GvRRRUFhRRRQAVwXxOH/COXmh+NI/lXRpmg1Ajvp85VZifaNlhmJ7CFvWu9qvqGn2+rafc2V3EtxaXMTQzROMq6MCGU+xBIrKrD2kHFb9PXp+JrSnyTTe3X06/gWK5u/udJT4jaHBNayvrr6VqD2l0pPlx26zWYnRhu+8ztbkfKeEbkdGzfhPqFyPD9xoGoStNqvh24OlzyyH5pkVVaCY+peFomJ/vFh2rSv8AWLaD4jaHpT6dFLeXOlahdR6i2PMgjims1eJflztkM0bHBAzCuQeCJU1Ugpen57E1Iezk4nSUUUVuQFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFc38NbnSbz4c+FZ9AtZbHQpdKtX0+1nJMkNuYVMSMSzZYJtB+Y8jqetdJXN/DXWLbxD8OfCuq2WnRaPZ32lWt1Bp0GPLtY3hVliXCqNqghRgAYHQdKh/Evn+gjpKKKKsYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABWRomnX9jqfiCa8uvtFveXyz2UfmM3kQi2gjKYIwv7yOVsLx8+epNa9YXh3S7ew1jxRPDfR3cl9qKXE0MeM2ri0t4xG2CeSsavzjiQcYwTpHaXp+qIluv66M3aKKKzLCiiigApGYIpZiAAMkntS02SNJo2jkVXRwVZWGQQeoIoA+ZPit+1N4E+FHxH/tXTtTTxJc3Vg1jqenaS4kxJGxa2kMn+rBBeZGAJbDrx8oFbX7N/7RPiT476vcXM/h+30zw6ovEEkCyStFLF9jMSPMcJuZbic42gny+Putnx/9qL9iUw/a/Fnw5syY+Zbzw9CMle5e3Hf1Mf8A3z2Wul/YAtNa0/wMsijy/D0t7qjXxfYCLoDTltgc/P8AdW76fL/e5218bQxGPWZewrrlhq0ls9tb/i9vQ+rxNDBPLvb0HzT0V3uvK34enU+vqK53xB470vw3r2i6TeSFbnVZGjiIxtTAyCx7AnCj3Nb/AJ0fneV5i+bjdsyN2PXHpX1kK1OpKUISTcXZrs7Xs/k7nzEqc4JSktHqvPoPooorYzCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKwvAmq6nrvgfw9qWtWf9n6xeadb3F7Z+U0XkTvErSR7GJZdrEjaxJGMHmt2s3w1a6lY+HNKttZvU1HV4bSKO9vI4xGs84QCSQKAAoZsnAAAzU9QNKiiiqAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqta6dbWM95NBCsUt5KJ7h16yOESMMffZGg+iirNFO9gtcKKKKQBRRRQAUUUUAFeNfGJfD/AIfEtkks9ncarZ3atpVlGUguZppID9plxhd6eQQD1/ev6nPstYPjbT11LQJYTp/9pOzoEiCgkZYZYE4xgZ5zXjZzRr4jL61PDNKbi7Npvp2Wvpv6PY7sDOFPEQlUTcbrZ2/r+tTwnw14Ak1m2SWR3lKKAruxYgDpya734c6Vb+DtV1S8u45me4EcLXbkvtwThfXkntnpW1pdvb+GGt7SW2e1nm/1UJk3lz6Lycn+VdDp4nfWmWfT3hiSENHM20qGzyBgnnGPyr8g4Z4V+oYqhinVl7eDamrSkm3F/FdLl0d03Z7LS59NmGZTrxnTa9x7bLS/TublFFFfvB8WFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBDNZwXE8E0kSPLAS0TsMlCQQSD24JFTUUUkkrtDbbCiiimIKKKKACiiigAooooAKKKKAP/2Q==)" ] }, { "cell_type": "markdown", "id": "a6c2d79b-16ce-42a3-b705-5b43e424bf07", "metadata": {}, "source": [ "Let:\n", "\n", "* $a, \\, h, \\, x, \\, y$: geometric distances.\n", "* $\\theta_{1}, \\, \\theta_{2}$: angle of the ray of light with respect to the normal in medium 1 and 2.\n", "* $d_{1}, \\, d_{2}$: length travelled by light in medium 1 and 2.\n", "* $v_{1}, \\, v_{2}$: speed of ligth in medium 1 and 2.\n", "* $t_{1}, \\, t_{2}$: time of travel in medium 1 and 2.\n", "* $n_{1}, \\, n_{2}$: index of refraction in medium 1 and 2.\n", "* $c$: speed of light in vacuum.\n", "\n", "Note the definition of index of refraction:\n", "\n", "$$\n", "v = \\frac{c}{n}\n", "$$\n", "\n", "where $v$ is the velocity, $c$ is the speed of light, $n$ is the index of refraction." ] }, { "cell_type": "code", "execution_count": 1, "id": "d7cbbab0-932d-461b-a0c3-675073d4b368", "metadata": {}, "outputs": [], "source": [ "from sympy import *\n", "from sympy_equation import Eqn, split_two_terms_add\n", "\n", "a, h, x, y, d1, d2, theta1, theta2 = symbols(\"a, h, x, y, d1, d2, theta1, theta2\", real=True, positive=True)\n", "v1, v2, t1, t2, c, n1, n2 = symbols(\"v1, v2, t1, t2, c, n1, n2\", real=True, positive=True)" ] }, { "cell_type": "markdown", "id": "2fef7c76-23c8-438a-8ad9-2f31893e5182", "metadata": {}, "source": [ "From the schematic:" ] }, { "cell_type": "code", "execution_count": 2, "id": "7868378c-11ea-447d-a6f2-28eba1e14c98", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle d_{1} = \\sqrt{h^{2} + x^{2}}$" ], "text/plain": [ "Equation(d1, sqrt(h**2 + x**2))" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "eq1 = Eqn(d1, sqrt(x**2 + h**2))\n", "eq1" ] }, { "cell_type": "code", "execution_count": 3, "id": "12d051d9-d53e-4eeb-8bb3-315f2ddf1b90", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle d_{2} = \\sqrt{y^{2} + \\left(a - x\\right)^{2}}$" ], "text/plain": [ "Equation(d2, sqrt(y**2 + (a - x)**2))" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "eq2 = Eqn(d2, sqrt((a - x)**2 + y**2))\n", "eq2" ] }, { "cell_type": "markdown", "id": "30a4a137-9718-47b6-8956-ea6448e3f4e2", "metadata": {}, "source": [ "Also:" ] }, { "cell_type": "code", "execution_count": 4, "id": "0fdfb9c1-d60f-4d10-815e-39c98f58db78", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle d_{1} \\sin{\\left(\\theta_{1} \\right)} = x$" ], "text/plain": [ "Equation(d1*sin(theta1), x)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "eq3 = Eqn(d1 * cos(pi - pi/2 - theta1), x)\n", "eq3" ] }, { "cell_type": "code", "execution_count": 5, "id": "fd535151-eba3-4a81-a0a1-88ef3d7a2e8e", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle d_{2} \\sin{\\left(\\theta_{2} \\right)} = a - x$" ], "text/plain": [ "Equation(d2*sin(theta2), a - x)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "eq4 = Eqn(d2 * sin(theta2), a - x)\n", "eq4" ] }, { "cell_type": "markdown", "id": "a5eb5a7c-9b59-40d1-a11c-64922dc507a0", "metadata": {}, "source": [ "From these last two equations we can easily solve for the angles:" ] }, { "cell_type": "code", "execution_count": 6, "id": "e932de5f-d740-47f8-a73b-edf35bdb7fa6", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\sin{\\left(\\theta_{1} \\right)} = \\frac{x}{\\sqrt{h^{2} + x^{2}}}$" ], "text/plain": [ "Equation(sin(theta1), x/sqrt(h**2 + x**2))" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "eq3 = (eq3 / d1).subs(eq1)\n", "eq3" ] }, { "cell_type": "code", "execution_count": 7, "id": "2f438c73-2bef-4fe2-b159-dc162bcb4c7b", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\sin{\\left(\\theta_{2} \\right)} = \\frac{a - x}{\\sqrt{y^{2} + \\left(a - x\\right)^{2}}}$" ], "text/plain": [ "Equation(sin(theta2), (a - x)/sqrt(y**2 + (a - x)**2))" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "eq4 = (eq4 / d2).subs(eq2)\n", "eq4" ] }, { "cell_type": "markdown", "id": "33290255-164b-410e-9389-a57e843e7a41", "metadata": {}, "source": [ "We also know the relationship between distance, speed and time:" ] }, { "cell_type": "code", "execution_count": 8, "id": "638314ec-0d9d-4a69-90ab-45bd3d8414d4", "metadata": {}, "outputs": [], "source": [ "eq5 = Eqn(d1, v1 * t1)\n", "eq6 = Eqn(d2, v2 * t2)" ] }, { "cell_type": "markdown", "id": "7e62dbe8-f1b1-4b70-8254-08a4475940c7", "metadata": {}, "source": [ "Then, we can easily solve for the time it takes the ray of light to travel each medium:" ] }, { "cell_type": "code", "execution_count": 9, "id": "8121f600-e2ea-489d-835a-1bd33a761e15", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle t_{1} = \\frac{\\sqrt{h^{2} + x^{2}}}{v_{1}}$" ], "text/plain": [ "Equation(t1, sqrt(h**2 + x**2)/v1)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "eq7 = (eq5 / v1).swap.subs(eq1)\n", "eq7" ] }, { "cell_type": "code", "execution_count": 10, "id": "0b6c78c4-094a-4b76-b11b-a8e5149bb39a", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle t_{2} = \\frac{\\sqrt{y^{2} + \\left(a - x\\right)^{2}}}{v_{2}}$" ], "text/plain": [ "Equation(t2, sqrt(y**2 + (a - x)**2)/v2)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "eq8 = (eq6 / v2).swap.subs(eq2)\n", "eq8" ] }, { "cell_type": "markdown", "id": "b5092d07-a86f-426b-b92f-bb61f425d232", "metadata": {}, "source": [ "The total time it takes the light to travel trough both mediums is:" ] }, { "cell_type": "code", "execution_count": 11, "id": "57dae6bd-bb41-4a7a-bece-5fe5c47c1ddf", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle t_{1} + t_{2} = \\frac{\\sqrt{y^{2} + \\left(a - x\\right)^{2}}}{v_{2}} + \\frac{\\sqrt{h^{2} + x^{2}}}{v_{1}}$" ], "text/plain": [ "Equation(t1 + t2, sqrt(y**2 + (a - x)**2)/v2 + sqrt(h**2 + x**2)/v1)" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "total_time = (eq7 + eq8)\n", "total_time" ] }, { "cell_type": "markdown", "id": "6cf1afe3-755d-442b-ba13-d16b350f2e65", "metadata": {}, "source": [ "[Fermat's Principle](https://en.wikipedia.org/wiki/Fermat%27s_principle), also known as the Principle of Least Time, states that the path taken by a ray between two given points is the path that can be traveled in the least time. So, we minimize the total time:" ] }, { "cell_type": "code", "execution_count": 12, "id": "85fb2de5-97f1-4fe7-a655-015a58c9e644", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\frac{- a + x}{v_{2} \\sqrt{y^{2} + \\left(a - x\\right)^{2}}} + \\frac{x}{v_{1} \\sqrt{h^{2} + x^{2}}} = 0$" ], "text/plain": [ "Equation((-a + x)/(v2*sqrt(y**2 + (a - x)**2)) + x/(v1*sqrt(h**2 + x**2)), 0)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "minimized = Eqn(total_time.rhs.diff(x), 0)\n", "minimized" ] }, { "cell_type": "markdown", "id": "988ac835-938a-4f77-aa88-d05627119a73", "metadata": {}, "source": [ "We can easily recognize the terms of this addition as the ones shown in the RHS of `eq3, eq4`. There is a small problem though: the first term on the LHS has the sign swapped in comparison to `eq4`. Let's separate the terms of this addition on both sides:" ] }, { "cell_type": "code", "execution_count": 13, "id": "a4a892bc-6250-495d-b2fc-0c3f86189a68", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\frac{x}{v_{1} \\sqrt{h^{2} + x^{2}}} = \\frac{a - x}{v_{2} \\sqrt{y^{2} + \\left(a - x\\right)^{2}}}$" ], "text/plain": [ "Equation(x/(v1*sqrt(h**2 + x**2)), (a - x)/(v2*sqrt(y**2 + (a - x)**2)))" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "minimized = split_two_terms_add(minimized).simplify()\n", "minimized" ] }, { "cell_type": "markdown", "id": "2869be6c-6315-4feb-8bd6-1110f06dca7b", "metadata": {}, "source": [ "Now we can perform the substitutions in order to show the dependancy on the angles:" ] }, { "cell_type": "code", "execution_count": 14, "id": "29b3c1eb-1e8c-49b9-bf6b-2efe2ca61b90", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\frac{\\sin{\\left(\\theta_{1} \\right)}}{v_{1}} = \\frac{\\sin{\\left(\\theta_{2} \\right)}}{v_{2}}$" ], "text/plain": [ "Equation(sin(theta1)/v1, sin(theta2)/v2)" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "minimized = minimized.subs(eq4.swap).subs(eq3.swap)\n", "minimized" ] }, { "cell_type": "markdown", "id": "0216d0d3-d905-4307-8024-33cb1a9e45bd", "metadata": {}, "source": [ "Then, we replace the velocities in order to visualize the indices of refraction:" ] }, { "cell_type": "code", "execution_count": 15, "id": "1814f944-0c9c-4384-b448-1e8c89060099", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\frac{n_{1} \\sin{\\left(\\theta_{1} \\right)}}{c} = \\frac{n_{2} \\sin{\\left(\\theta_{2} \\right)}}{c}$" ], "text/plain": [ "Equation(n1*sin(theta1)/c, n2*sin(theta2)/c)" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "idx_of_refrac = lambda n, v, c: Eqn(v, c / n)\n", "minimized = minimized.subs(idx_of_refrac(n1, v1, c), idx_of_refrac(n2, v2, c))\n", "minimized" ] }, { "cell_type": "code", "execution_count": 16, "id": "21b7156d-1478-432e-93af-17293b291a05", "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle n_{1} \\sin{\\left(\\theta_{1} \\right)} = n_{2} \\sin{\\left(\\theta_{2} \\right)}$" ], "text/plain": [ "Equation(n1*sin(theta1), n2*sin(theta2))" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "snell = minimized * c\n", "snell" ] }, { "cell_type": "code", "execution_count": null, "id": "ff0531ed-fa18-485d-bf54-8b205b90d89a", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.7" } }, "nbformat": 4, "nbformat_minor": 5 }