Обычно при разработке пользовательского интерфейса у вас есть модель данных и представление, которое отображает модель данных.
Ваша проблема немного другая. У вас будет класс, представляющий зеркало, и другой класс, представляющий линзу. Экземпляры классов будут содержать информацию о состоянии, такую как положение объекта и направление, в котором находится объект. Методы класса будут отвечать за реализацию правил физики зеркал и линз.
Ваша логика рисования вида должна будет делать больше, чем просто визуализировать модель данных. Вам нужно будет пройтись по всем экземплярам ваших объектов, чтобы обнаружить удар, а затем применить физические правила к лучу, чтобы увидеть, куда идти дальше.
Хотя источник луча, линзы и зеркала являются объектами в вашей модели данных, сам луч должен вычисляться каждый раз, когда вы хотите нарисовать луч на виде.