Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Точки пересечения окружностей (http://www.flasher.ru/forum/showthread.php?t=185123)

expl 05.10.2012 17:12

Цитата:

x = a + ek/p + (f/p)sqrt(r^2 - k^2)
y = b + fk/p - (e/p)sqrt(r^2 - k^2)
OR
x = a + ek/p - (f/p)sqrt(r^2 - k^2)
y = b + fk/p + (e/p)sqrt(r^2 - k^2)
видимо то, что после OR - вторая

CrazyPHP 05.10.2012 17:33

Всё отлично работает, выкладываю решение:

решение уравнения:
Цитата:

R1^2 = (x01 - x)^2 + (y01 - y)^2
R2^2 = (x02 - x)^2 + (y02 - y)^2
вот тут: http://mathforum.org/library/drmath/view/51836.html

Функция:
Код AS3:

/**
 * точка соприкосновения окружностей
 */

 
public function intersect_circles(circle_1:Point, circle_2:Point, radius_1:Number, radius_2:Number):Point {
        var a:Number = circle_1.x;
        var b:Number = circle_1.y;
        var c:Number = circle_2.x;
        var d:Number = circle_2.y;
 
        var r:Number = radius_1;
        var s:Number = radius_2;
 
        var e:Number = c - a;                         
        var f:Number = d - b;                     
        var p:Number = Math.sqrt(Math.pow(e,2) + Math.pow(f,2));     
        var k:Number = (Math.pow(p, 2) + Math.pow(r, 2) - Math.pow(s, 2)) / (2 * p)
 
        var x:Number = a + e * k / p + (f / p) * Math.sqrt(Math.pow(r, 2) - Math.pow(k, 2));
        var y:Number = b + f * k / p - (e / p) * Math.sqrt(Math.pow(r, 2) - Math.pow(k, 2));
 
        return new Point(x,y);
}

Чтобы получить обе точки просто меняем координаты и радиусы местами:
Код AS3:

//первая точка пересечения
var point_1:Point = intersect_circles(circle_1_position, circle_2_position, circle_1_radius, circle_2_radius);
 
//вторая точка пересечения
var point_2:Point = intersect_circles(circle_2_position, circle_1_position, circle_2_radius, circle_1_radius);

Цитата:

видимо то, что после OR - вторая
присмотрись они одинаковые.


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

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