Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2012, 11:26   #1
Kehab
Новичок
Джуниор
 
Регистрация: 19.01.2012
Сообщений: 1
По умолчанию Программа бильярд(соударение мячей) C#

Народ здраствуйте. так вот никак не могу написать код чтобы шары отталкивались друг от друга нужна ваша помощь. Вот функция которую я составил по описанию на сайте http://billiard-bsv.narod.ru/ класс ball:
v - ед. вектор скорости (только координаты умноженые на 1000 потому что сохранён в типе Point)
(x, y) - координаты шара
l - скорость
Код:
 
private void clash(ref ball b1, ref ball b2)
        {
            double AB = Math.Sqrt((b2.x - b1.x) * (b2.x - b1.x) + (b2.y - b1.y) * (b2.y - b1.y));
            double m = 0.97;
            double a;
            double b;
            double xx1 = 0;
            double xy1 = 0;
            double xx2 = 0;
            double xy2 = 0;
            if (b1.l > 0)
            {
                a = Math.Acos(((double)(b2.x - b1.x) / (double)h));
                if (b2.y <= b1.y)
                    a *= (-1);
                b = b1.l * Math.Acos(b1.v.X / 1000);
                if (b1.v.Y <= 0)
                    b = b * (-1);
                b = b - a;
                xx1 = Math.Cos(b) * Math.Cos(a);
                xy1 = Math.Cos(b) * Math.Sin(a);
            }
            if (b2.l > 0)
            {
                a = Math.Acos((b1.x - b2.x) / h);
                if ((b1.y - b2.y) <= 0)
                    a = a * (-1);
                b = b2.l * Math.Acos(b2.v.X / 1000);
                if (b2.v.Y <= 0)
                    b = b * (-1);
                b = b - a;
                xx2 = Math.Cos(b) * Math.Cos(a);
                xy2 = Math.Cos(b) * Math.Sin(a);
            }


            double dx = ((((double)b1.v.X * b1.l / 1000) - (2 * xx1)) + xx2) * m;
            double dy = ((((double)b1.v.Y * b1.l / 1000) - (2 * xy1)) + xy2) * m;
            b1.l = (float)Math.Sqrt((dx * dx) + (dy * dy));
            b1.v.X = (int)(dx * 1000 / b1.l);
            b1.v.Y = (int)(dy * 1000 / b1.l);
            
            dx = ((((double)b2.v.X * b2.l / 1000) - (2 * xx2)) + xx1) * m;
            dy = ((((double)b2.v.Y * b2.l / 1000) - (2 * xy2)) + xy1) * m;
            b2.l = (float)Math.Sqrt((dx * dx) + (dy * dy));
            b2.v.X = (int)(dx * 1000 / b2.l);
            b2.v.Y = (int)(dy * 1000 / b2.l);
         }

Последний раз редактировалось Kehab; 21.01.2012 в 11:48.
Kehab вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Игра бильярд 2Д Milka_777 Помощь студентам 5 27.10.2017 22:21
Соударение shapoB IL-93 Помощь студентам 0 13.11.2010 16:22
Программа бильярд. Dezolyator Помощь студентам 4 04.05.2010 19:15
бильярд в Дельфи aiktz Общие вопросы Delphi 6 04.05.2010 15:12
Соударение шариков разных размеров и объемов Стаханов_Андрей Помощь студентам 3 09.03.2008 17:17