![]() |
|
||||||||||
|
|||||
|
.
|
Если нашли координаты центра, то циклом от i = 0 пока i < step вычисляете координаты очередной точки на окружности начиная от одной из заданных, поворачивая радиус на угол +(-)k, где k равен центральный угол деленный количество шагов (step). Не забываем увеличивать i после каждой итерации )
|
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
r = 0.5 * a / Math.sin(0.5 * alpha)
на всякий.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. Последний раз редактировалось -De-; 30.07.2011 в 00:34. |
|
|||||
|
Регистрация: Feb 2011
Сообщений: 21
|
Вооо, проясняется!! =) а как координаты центра-то найти?
|
|
|||||
|
Меня заинтриговали аж, по тригонометрии твердая 3ка была. Нарисовал все что известно на листочке, в результате все упростилось до прямоугольного треугольника. Советую автору поступить также.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку. |
|
|||||
|
Регистрация: Feb 2011
Сообщений: 21
|
Ну тут понятно, что прямоугольный треугольник получится от пересечения радиуса, хорды и отрезка от одной из точек на дуге до центра (то бишь ещё одного радиуса). Отсюда и синусы-косинусы... Но я не понимаю, как найти именно координаты центра, чтобы прибавлять относительно него угол, как описал dimarik
Последний раз редактировалось Dmitriy913; 30.07.2011 в 00:51. |
|
|||||
|
Регистрация: Apr 2009
Адрес: Armenia , Yerevan
Сообщений: 145
|
Цитата:
Добавлено через 11 минут Цитата:
__________________
Urartu is a neoHittite and ProtoArmenian kingdom !! |
|
|||||
|
Регистрация: Feb 2011
Сообщений: 21
|
Подожди, а без векторов никак? Должно же быть всё проще, подсказывает моя интуиция) Но вот никак я не соображу... Известна длина хорды, центральный угол, можно найти радиус... А центр-то как??
|
|
|||||
|
Регистрация: Apr 2009
Адрес: Armenia , Yerevan
Сообщений: 145
|
Цитата:
Добавлено через 6 минут http://www.freeclickgames.org/3d/Math.rar Вот тут некоторие математические классы особо нужние Vector2d.as и Geometry.as мой тебе совет посторайся освоить и исползывать их. К стате эти классы я кагда то скачал из разных мест но там множество и моих функции добавлены там неграмотно написенные мои ))))
__________________
Urartu is a neoHittite and ProtoArmenian kingdom !! |
|
|||||
|
Регистрация: Feb 2011
Сообщений: 21
|
Спасибо большое, Vishapakahr =) Сегодня уже сил нет, завтра надо будет разобраться, посмотреть, почитать)
|
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Объяснять я не умею, поэтому только так:
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. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| Дуга , построение кривой |
| Опции темы | |
| Опции просмотра | |
|
|