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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.07.2011, 23:54
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 11  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Если нашли координаты центра, то циклом от i = 0 пока i < step вычисляете координаты очередной точки на окружности начиная от одной из заданных, поворачивая радиус на угол +(-)k, где k равен центральный угол деленный количество шагов (step). Не забываем увеличивать i после каждой итерации )
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 30.07.2011, 00:09
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 12  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
r = 0.5 * a / Math.sin(0.5 * alpha)
на всякий.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.


Последний раз редактировалось -De-; 30.07.2011 в 00:34.
Старый 30.07.2011, 00:28
Dmitriy913 вне форума Посмотреть профиль Отправить личное сообщение для Dmitriy913 Найти все сообщения от Dmitriy913
  № 13  
Ответить с цитированием
Dmitriy913

Регистрация: Feb 2011
Сообщений: 21
Вооо, проясняется!! =) а как координаты центра-то найти?

Старый 30.07.2011, 00:41
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 14  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Меня заинтриговали аж, по тригонометрии твердая 3ка была. Нарисовал все что известно на листочке, в результате все упростилось до прямоугольного треугольника. Советую автору поступить также.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 30.07.2011, 00:45
Dmitriy913 вне форума Посмотреть профиль Отправить личное сообщение для Dmitriy913 Найти все сообщения от Dmitriy913
  № 15  
Ответить с цитированием
Dmitriy913

Регистрация: Feb 2011
Сообщений: 21
Ну тут понятно, что прямоугольный треугольник получится от пересечения радиуса, хорды и отрезка от одной из точек на дуге до центра (то бишь ещё одного радиуса). Отсюда и синусы-косинусы... Но я не понимаю, как найти именно координаты центра, чтобы прибавлять относительно него угол, как описал dimarik


Последний раз редактировалось Dmitriy913; 30.07.2011 в 00:51.
Старый 30.07.2011, 01:39
Vishapakahr вне форума Посмотреть профиль Отправить личное сообщение для Vishapakahr Найти все сообщения от Vishapakahr
  № 16  
Ответить с цитированием
Vishapakahr

Регистрация: Apr 2009
Адрес: Armenia , Yerevan
Сообщений: 145
Цитата:
Сообщение от dimarik Посмотреть сообщение
Не не. Тогда r = a / Math.sin(alpha), ведь "половину угла через alpha" )
да перепутал ))

Добавлено через 11 минут
Цитата:
Сообщение от Dmitriy913 Посмотреть сообщение
Ну тут понятно, что прямоугольный треугольник получится от пересечения радиуса, хорды и отрезка от одной из точек на дуге до центра (то бишь ещё одного радиуса). Отсюда и синусы-косинусы... Но я не понимаю, как найти именно координаты центра, чтобы прибавлять относительно него угол, как описал dimarik
Ну для координат нужно применить векторы , у меня есть пару математических классов если хочель залью здесь ?
__________________
Urartu is a neoHittite and ProtoArmenian kingdom !!

Старый 30.07.2011, 01:54
Dmitriy913 вне форума Посмотреть профиль Отправить личное сообщение для Dmitriy913 Найти все сообщения от Dmitriy913
  № 17  
Ответить с цитированием
Dmitriy913

Регистрация: Feb 2011
Сообщений: 21
Подожди, а без векторов никак? Должно же быть всё проще, подсказывает моя интуиция) Но вот никак я не соображу... Известна длина хорды, центральный угол, можно найти радиус... А центр-то как??

Старый 30.07.2011, 02:19
Vishapakahr вне форума Посмотреть профиль Отправить личное сообщение для Vishapakahr Найти все сообщения от Vishapakahr
  № 18  
Ответить с цитированием
Vishapakahr

Регистрация: Apr 2009
Адрес: Armenia , Yerevan
Сообщений: 145
Цитата:
Сообщение от Dmitriy913 Посмотреть сообщение
Подожди, а без векторов никак? Должно же быть всё проще, подсказывает моя интуиция) Но вот никак я не соображу... Известна длина хорды, центральный угол, можно найти радиус... А центр-то как??
Векторы это самый лехкий путь чтож может быть лучше и быстрее ? )) смотри коортинаты середини отрезка (обозначим через M)есть , давай расмотрим его как радиус вектор от начяло системи координат (обозначим началу координат через О) и обозначим вектор OM. А сейчас расмотрим другой вектор от M до R (то самая искомая точка). и так вектор OR=OM+MR (1) . OM мы имеем , MR есть его модуль h который я расчитал чуть выше и нужно лишь найти его поворот относительно абсциссы после чего можно найти координаты MR и все нужно уже вставить его в (1) . Ну да классы не нужны тут все просто вроде )

Добавлено через 6 минут
http://www.freeclickgames.org/3d/Math.rar

Вот тут некоторие математические классы особо нужние Vector2d.as и Geometry.as мой тебе совет посторайся освоить и исползывать их. К стате эти классы я кагда то скачал из разных мест но там множество и моих функции добавлены там неграмотно написенные мои ))))
__________________
Urartu is a neoHittite and ProtoArmenian kingdom !!

Старый 30.07.2011, 02:35
Dmitriy913 вне форума Посмотреть профиль Отправить личное сообщение для Dmitriy913 Найти все сообщения от Dmitriy913
  № 19  
Ответить с цитированием
Dmitriy913

Регистрация: Feb 2011
Сообщений: 21
Спасибо большое, Vishapakahr =) Сегодня уже сил нет, завтра надо будет разобраться, посмотреть, почитать)

Старый 30.07.2011, 13:25
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 20  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Объяснять я не умею, поэтому только так:
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
 
 
	/**				
	 * @author i.o.	
	 */
	public class Main extends Sprite 
	{
 
		public function Main()
		{
			if (this.stage)
				this._init();
			else
				this.addEventListener(Event.ADDED_TO_STAGE, this._init);
		}
 
		///
		private function _init( e:Event=null ) : void 
		{
			this.removeEventListener(Event.ADDED_TO_STAGE, this._init);
			this.stage.addEventListener(MouseEvent.MOUSE_MOVE, this._onMMove);
		}
 
		///
		private function _onMMove( e:MouseEvent ) : void
		{
			this.graphics.clear();
 
			var arcAngle:Number = Math.PI / 3;
			var positive:Boolean = true;
			var a:Vector2 = new Vector2(300.0, 300.0);
			var b:Vector2 = new Vector2(e.stageX, e.stageY);
			var c:Vector2 = Geom2Utils.getArcCenter(a, b, arcAngle, positive);
 
			this._drawPoint(a, 2, 0x00FF00);
			this._drawPoint(b, 2, 0x0000FF);
			this._drawPoint(c, 5, 0xFF00FF);
 
			this._drawArc(a, c, arcAngle, positive);
 
			e.updateAfterEvent();
		}
 
		///
		private function _drawPoint( p:Vector2, radius:uint=2, color:uint=0xFF00FF ) : void
		{
			this.graphics.beginFill(color, 1.0);
			this.graphics.drawCircle(p.x, p.y, radius);
			this.graphics.endFill();
		}
 
		///
		private function _drawArc( start:Vector2,
		                           center:Vector2,
		                           arcAngle:Number,
		                           positive:Boolean=true,
		                           substeps:uint=50,
		                           lineColor:uint=0x00FF00 ) : void
		{
			this.graphics.lineStyle(1.0, lineColor);
			this.graphics.moveTo(start.x, start.y);
 
			var origVec:Vector2 = Vector2.fromPoints(center, start);
			var currVec:Vector2 = new Vector2();
			var m:Number = positive ? 1.0 : -1.0;
			var i:int = -1;
			var l:int = substeps;
			while (++i < l)
			{
				origVec.rotateDest(currVec, m * arcAngle * (i + 1) / l);
				this.graphics.lineTo(center.x + currVec.x, center.y + currVec.y);
			}
		}
 
	}
}
 
 
internal final class Geom2Utils
{
	///
	public static function getArcCenter( start:Vector2,
	                                     end:Vector2,
	                                     arcAngle:Number,
	                                     positive:Boolean=true ) : Vector2
	{
		var dir:Vector2 = Vector2.fromPoints(start, end);
		var p:Vector2 = new Vector2(start.x + 0.5 * dir.x, start.y + 0.5 * dir.y);
		var a:Number = 0.5 * dir.getLength();
		var b:Number = a / Math.tan(0.5 * arcAngle);
		var dirB:Vector2 = dir.clone();
		dirB.rotate90(positive);
		dirB.normalize(b);
 
		return new Vector2(p.x + dirB.x, p.y + dirB.y);
	}
}
 
 
internal final class Vector2
{
	public static function fromPoints( start:Vector2, end:Vector2 ) : Vector2
	{
		return new Vector2(end.x - start.x,  end.y - start.y);
	}
 
 
	public function Vector2( x:Number=0.0, y:Number=0.0 )
	{
		this.x = x;
		this.y = y;
	}
 
 
	public var x : Number;
	public var y : Number;
 
 
	public function clone() : Vector2
	{
		return new Vector2(this.x, this.y);
	}
 
	public function getLength() : Number
	{
		return Math.sqrt(this.x * this.x + this.y * this.y);
	}
 
	public function normalize( length:Number=1.0 ) : void
	{
		var m:Number = length / Math.sqrt(this.x * this.x + this.y * this.y);
		this.x *= m;
		this.y *= m;
	}
 
	public function rotate( angle:Number ) : void
	{
		var sinA:Number = Math.sin(angle);
		var cosA:Number = Math.cos(angle);
 
		var sx:Number = this.x;
		var sy:Number = this.y;
 
		this.x = sx * cosA + sy * sinA;
		this.y = sy * cosA - sx * sinA;
	}
 
	public function rotateDest( dst:Vector2, angle:Number ) : void
	{
		var sinA:Number = Math.sin(angle);
		var cosA:Number = Math.cos(angle);
 
		dst.x = this.x * cosA + this.y * sinA;
		dst.y = this.y * cosA - this.x * sinA;
	}
 
	public function rotate90( positive:Boolean=true ) : void
	{
		var sx:Number = this.x;
		var sy:Number = this.y;
 
		if (positive)
		{
			this.x = sy;
			this.y = -sx;
		}
		else
		{
			this.x = -sy;
			this.y = sx;
		}
	}
}
}

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

Теги
Дуга , построение кривой
Опции темы
Опции просмотра

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

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


 


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


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