Найти точку на внешнем концентрическом круге в ActionScript - PullRequest
0 голосов
/ 29 мая 2011

У меня есть два концентрических круга с центрами в (centerX, centerY).Внутренний круг имеет радиус 100, а внешний круг имеет радиус 400. Если взять точку на окружности внутреннего круга, я могу провести линию от центра к этой точке.Давайте назовем эту точку x1, y1).Теперь я хочу продолжить этот радиус до внешнего концентрического круга и вычислить положение этой внешней точки (x2, y2).

Я добавляю точку в 3 пикселя, чтобы показать, где x1, y1на экране.(Вопрос: я не вижу этого ... не знаю почему.)

Это то, что я пытаюсь:

    var x1:Number = 100;
    var y1:Number = 50;
    var x2:Number;
    var y2:Number;
    var centerX:Number = 200;
    var centerY:Number = 200;

    var myAngle:Number = Math.atan2(y1 - centerY, x1-centerX);
    //x2 = x1 + 300 * Math.cos(myAngle);
    //y2 = y1 + 300 * Math.sin(myAngle);
    x2 = centerX + Math.cos(myAngle) * 400;
    y2 = centerY + Math.sin(myAngle) * 400;
    trace("x2,y2 = " + x2 + "," + y2);

    var myCenterPoint:Sprite = new Sprite();
    this.graphics.lineStyle(3,0x00ff00); //green, center point
    this.graphics.moveTo(centerX, centerY);
    graphics.drawCircle(centerX,centerY,5);
    addChild(myCenterPoint);

    var myInnerCirclePointMarker:Sprite = new Sprite();
    this.graphics.lineStyle(3,0x0000FF); //blue, inner circle circumf. marker
    this.graphics.moveTo(x1, y1);
    graphics.drawCircle(x1,y1,5);
    addChild(myInnerCirclePointMarker);

    trace("x2,y2 = " + x2 + "," + y2);
    var myOuterCirclePointMarker:Sprite = new Sprite();
    this.graphics.lineStyle(3,0xff0000); //red, outer circle circumf. marker
    myOuterCirclePointMarker.graphics.drawCircle(x2,y2,5);
    addChild(myOuterCirclePointMarker);

            this.graphics.moveTo(centerX, centerY);
            this.graphics.lineTo(x2, y2);    //draw line, which should go through 
                                             //x1,y1 and end at x2,y2

Я не думаю, что это будет правильнопокажи мне внешние точки по всем 360 градусам круга.

Спасибо.

1 Ответ

0 голосов
/ 29 мая 2011

Я думаю, что вы отключили триг, вы не должны умножать значения sin / cos на 300. Вы хотите нарисовать линию от центра круга (centerX, centerY) до x2, y2 (внешний круг), но вы используете x1, y1 в качестве центра вашего круга.x2, y2 следует рассчитывать по центру круга, а не по x1, y1;Попробуйте это

var myAngle:Number = Math.atan2(y1 - centerY, x1 - centerX);
x2 = centerX + Math.cos(myAngle) * 400;
y2 = centerY + Math.sin(myAngle) * 400;
var myCircle:Sprite = new Sprite();

this.graphics.lineStyle(3,0x00ff00);
this.graphics.moveTo(centerX, centerY);
this.graphics.lineTo(x2, y2);

myCircle.graphics.drawCircle(x1,y1,5);
addChild(myCircle);

Причина, по которой ваш круг x1, y1 не отображается, заключается в том, что он не находится на внутреннем круге, который имеет ограничивающую рамку (100,100), (300,300), т.е.) не находится в ограничительной рамке.

...