Помогите с уравнением столкновения - PullRequest
1 голос
/ 22 июня 2011

Я сделал уравнение столкновения (col и cold - линии -> x и -> y - начальные точки, а h () и w () - высота и ширина). o & z неизвестны.

    col->x+(col->w())*o=cold->x+(cold->w())*z;
     col->y+(col->h())*o=cold->y+(cold->h())*z;

и я решил это:

z=(cold->y-col->y-col->h()/col->w()* (cold->x-col->x))/(col->h()/col->w()*cold->w() - cold->h());
o=(cold->x+cold->w()*z-col->x)/col->w();

Хорошо работает (не уверен), но если одна из линий вертикальная или горизонтальная, я получаю повсюду NaN. Кто-нибудь понял почему? Это правильно (я сделал это шесть раз)?

Ответы [ 3 ]

4 голосов
/ 22 июня 2011

В этих случаях вы, вероятно, делите ноль на ноль.

Я бы предложил разбить ваше назначение на пошаговые фрагменты и проверять значение по ходу.

0 голосов
/ 22 июня 2011

Используя Mathematica (я ленивый) Я получаю:

enter image description here

Это должно дать вам деление на ноль, если coldw colh = coldh colw или coldh / coldw = colh / colw, т.е. когда оба склона равны (другими словами, когда обе линии параллельны).

0 голосов
/ 22 июня 2011

Вы, вероятно, делаете это неправильно. Хотя трудно сказать, потому что вы, очевидно, не можете сказать нам, что на земле вы пытаетесь сделать. О, и если вы делаете это неправильно, это все равно неправильно, если вы делали это неправильно шесть раз. Я обнаружил, что сделать это правильно один раз, безусловно, лучший подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...