Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 31.01.2012, 14:52
Wadimir вне форума Посмотреть профиль Отправить личное сообщение для Wadimir Найти все сообщения от Wadimir
  № 1  
Ответить с цитированием
Wadimir

Регистрация: Nov 2009
Сообщений: 176
По умолчанию угол отражения в окружности

Добрый день!
Столкнулся с проблемой. Есть окружность. Внутри окружности летает шарик. Когда шарик ударяется об стену он отлетает на какой то угол. Как найти этот угол отражения?

Старый 31.01.2012, 15:00
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 2  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Под каким углом он ударяется к касательной в точке соприкосновения, под таким и отлетит. Наверное)))
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 31.01.2012, 15:20
elder_Nosferatu вне форума Посмотреть профиль Отправить личное сообщение для elder_Nosferatu Найти все сообщения от elder_Nosferatu
  № 3  
Ответить с цитированием
elder_Nosferatu
 
Аватар для elder_Nosferatu

Регистрация: Nov 2010
Адрес: 48° 55'N 24° 42'E GMT +2:00
Сообщений: 399
Записей в блоге: 1
Название: collision.PNG
Просмотров: 422

Размер: 1.2 Кб

Если не описываете физику всего происходящего (как минимум действие дессипативных сил на идеально упригий шарик и идеально упругую "скоролупу"), то картинкой вполне обойдетесь.


Последний раз редактировалось iNils; 31.01.2012 в 15:27.
Старый 31.01.2012, 15:37
Wadimir вне форума Посмотреть профиль Отправить личное сообщение для Wadimir Найти все сообщения от Wadimir
  № 4  
Ответить с цитированием
Wadimir

Регистрация: Nov 2009
Сообщений: 176
картинку я и сам понимаю как нарисовать, как это общитать?

Старый 31.01.2012, 15:44
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 5  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Код движения в студию
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 31.01.2012, 15:52
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 6  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Эх, нечасто я в разделе про as3 пишу

Код AS3:
import flash.display.Graphics;
 
var temp:Sprite = new Sprite();
addChild(temp);
var areaRadius:int = 180;
var areaCenterX:int = 275;
var areaCenterY:int = 200;
var ballRadius = 20;
var ball:Object = {};
ball.x = areaCenterX + 90;
ball.y = areaCenterY;
 
var ballSpeed:Number = 20;
var randomAngle:Number = 90 * Math.PI / 180;
ball.vx = Math.cos(randomAngle) * ballSpeed;
ball.vy = Math.sin(randomAngle) * ballSpeed;
 
var hitDistance:int = areaRadius - ballRadius;
 
var g:Graphics = this.graphics;
g.lineStyle(1,0xFF0000,1);
g.drawCircle(areaCenterX,areaCenterY,areaRadius);
 
var ballSprite:Sprite = new Sprite();
ballSprite.graphics.lineStyle(1,0x00FF00,1);
ballSprite.graphics.drawCircle(0,0,ballRadius);
 
 
addChild(ballSprite);
 
function step(e:Event = null):void {
 
	var newX:Number = ball.x + ball.vx;
	var newY:Number = ball.y + ball.vy;
 
	var dx:Number = (newX - areaCenterX);
	var dy:Number = (newY - areaCenterY);
	var distance:Number = Math.sqrt(dx * dx + dy * dy);
	if (distance >= hitDistance) {
 
		var ballAngle:Number = Math.atan2(ball.vy,ball.vx);
		var hitX:Number = hitDistance * Math.cos(ballAngle);
		var hitY:Number = hitDistance * Math.sin(ballAngle);
		var hitAngle:Number = Math.atan2(newY - areaCenterY,newX - areaCenterX);
		var bounceAngle:Number = ballAngle+2* (hitAngle - ballAngle);
 
		temp.graphics.clear();
		temp.graphics.lineStyle(1,0xFF00FF,1);
		temp.graphics.moveTo(newX, newY);
		temp.graphics.lineTo(newX + Math.cos(bounceAngle) * 200, newY + Math.sin(bounceAngle) * 200);
 
		ball.vx = ballSpeed *  -  Math.cos(bounceAngle);
		ball.vy = ballSpeed *  -  Math.sin(bounceAngle);
	}
 
	ball.x +=  ball.vx;
	ball.y +=  ball.vy;
	//
	ballSprite.x = ball.x;
	ballSprite.y = ball.y;
}
step();
addEventListener(Event.ENTER_FRAME, step);
Вот, разбирайтесь, это несложно.

P.S. У меня код с ошибкой, через некоторое время шарик "выравнивается". Если исправлю — обновлю код
__________________
hauts.ru


Последний раз редактировалось Hauts; 31.01.2012 в 16:10.
Старый 31.01.2012, 18:47
Wadimir вне форума Посмотреть профиль Отправить личное сообщение для Wadimir Найти все сообщения от Wadimir
  № 7  
Ответить с цитированием
Wadimir

Регистрация: Nov 2009
Сообщений: 176
Большое спасибо!!!

Создать новую тему Ответ Часовой пояс GMT +4, время: 22:13.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 22:13.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.