|
|
|||||
Регистрация: Nov 2016
Сообщений: 3
|
Проблема с радиусом окружности
С помощью цикла создаю несколько точек, которые располагаются по окружности с радиусом 200, но после компиляции расстояние между центром окружности и точками не у всех одинаковое. Как это можно исправить?
public function getCoordinates(centerPoint:Point,lengthLine:Number,angleInDegree:Number):Point { const ANGLE_IN_RADIANS:Number = angleInDegree * Math.PI / 180; //Стороны: const SIDE_C:Number = lengthLine; const SIDE_B:Number = Math.sin(ANGLE_IN_RADIANS) * SIDE_C; const SIDE_A:Number = Math.cos(ANGLE_IN_RADIANS) * SIDE_C; return new Point(centerPoint.x - SIDE_B, centerPoint.y - SIDE_A); } const POINT_OF_IMPEDIMENT:Point = new Point(400, 400); const AMOUNT_OF_THE_POINTS_AROUND_THE_IMPEDINT:int = 360 / 36; for (var indexThePointAroundTheImpediment:int = 0; indexThePointAroundTheImpediment < AMOUNT_OF_THE_POINTS_AROUND_THE_IMPEDINT; indexThePointAroundTheImpediment++) { const ANGLE_OF_POINT:int = 36 * indexThePointAroundTheImpediment; const COORDINATES_THE_POINT_AROUND_THE_IMPEDIMENT:Point = this.getCoordinates(POINT_OF_IMPEDIMENT, 200, ANGLE_OF_POINT); const DISTANCE_BETWEEN_THE_POINT_AND_THE_IMPEDIMENT:Number = Point.distance(COORDINATES_THE_POINT_AROUND_THE_IMPEDIMENT, POINT_OF_IMPEDIMENT); trace(DISTANCE_BETWEEN_THE_POINT_AND_THE_IMPEDIMENT); } 200 200 200 200 200.00000000000003 200 200 200.00000000000003 199.99999999999997 200.00000000000003 |
|
|||||
Учитывайте погрешность вычислений. Компьютер пока что не гарантирует точность выполнения операций вычисления корня, умножения, деления, тригонометрии до триллионной.
Вам нужно округлить до ближайшего целого - Math.round().
__________________
There is no thing in this world that is not simple. |
|
|||||
Регистрация: Nov 2016
Сообщений: 3
|
Хорошо, раз это пока не исправить, то не подскажите как можно сделать так, чтобы объект, находясь от другого объекта на расстояние 100 пикселей, получал такой угол поворота, который ему поможет двигаться вокруг этого объекта не приближаясь и не отдаляясь (примерно 100) со скоростью 10 пикселей? Просто, если есть проблема с радиусом, то тогда угол портится, и то движение невозможно, всегда выходит так, что объект либо приближается к объекту слишком близко, либо уезжает за сцену. Так-то я брал первую и вторую точку, потом определял угол поворота первой точки по отношению ко второй, и этот угол служит для объекта углом поворота вокруг другого объекта.
|
|
|||||
Эти погрешности настолько незначительны, что вряд ли заметно повлияют на работу вашей программы. 1 триллионная - это невероятно маленькая погрешность. Никак слишком близко объект не приблизится, как и не уедет за сцену.
__________________
There is no thing in this world that is not simple. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Может чем-то поможет: http://flasher.ru/forum/showpost.php...1&postcount=18
__________________
Reality.getBounds(this); |
Часовой пояс GMT +4, время: 16:16. |
|
« Предыдущая тема | Следующая тема » |
|
|