![]() |
|
||||||||||
|
|
|
|||||
|
Modus ponens
|
Не могу посчитать
![]() public function reflection(force:Point):Point { var x:Number = force.x; var y:Number = force.y; var perpendicular:Number = _angle - Math.PI / 2; // _angle - угол наклона поверхности var iangle:Number = Math.atan2(x, y); // iangle - угол падения var rangle:Number = perpendicular - iangle; // rangle - должен быть угол отражения var d:Number = Math.sqrt(x * x + y * y); return new Point(Math.cos(rangle) * d, Math.sin(rangle) * d); } ![]()
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 14.06.2009 в 15:36. |
|
|||||
|
затык скорее всего в Math.atan2(x, y), должно быть Math.atan2(y, x)
остальное только вопрос системы координат/обозначений upd: мне кажется так должно быть public function reflection(force:Point):Point { var x:Number = force.x; var y:Number = force.y; var perpendicular:Number = _angle - Math.PI / 2; var iangle:Number = Math.atan2(y, x); var rangle:Number = 2 * perpendicular - iangle;//угол падения равен углу.. var d:Number = Math.sqrt(x * x + y * y); return new Point(Math.cos(rangle) * d, Math.sin(rangle) * d); } Последний раз редактировалось silin; 14.06.2009 в 16:15. |
|
|||||
|
блогер
Регистрация: May 2008
Адрес: (0, 10, 185) в локальной системе
Сообщений: 721
Записей в блоге: 6
|
Мне больше нравится, когда плоскость задается нормалью и оффсетом из формулы Ax + By + C = 0, где A - x нормали, B - y нормали, C - оффсет
Тогда и отражение от плоскости считается очень просто: function reflect(vector:Point, normal:Point):void { // Поскольку длина нормали 1, скалярное произведение дает проекцию // вектора на перпендикуляр к плоскости var dot:Number = vector.x*normal.x + vector.y*normal.y; // Меняем направление вектора противоположно плоскости vector.x -= 2*dot*normal.x; vector.y -= 2*dot*normal.y; } Добавлено через 6 минут Всмысле не плоскость, а прямая. Но для плоскости формулы будут теже. |
![]() |
![]() |
Часовой пояс GMT +4, время: 15:52. |
|
|
« Предыдущая тема | Следующая тема » |
|
|