2012-05-07 5 views
1

X位置だけがわかっている回転したオブジェクトのY位置をステージ上で調べようとしています。私はこれをどうやってやっていくのかについてはあまり精通していませんが、境界オブジェクトの回転に関連していることはわかっています。AS3 - Xがわかっている場合、回転したオブジェクトのY位置を見つける

私がしなければならないことは、実際には下のX位置に基づいて、画面上の黒い境界線に当たる前の正確な最大Y位置を知ることです。私は元の位置が280であることを知っていますが、どのようにしてYポジションがさらに下がっていくのか、私は全くわかりません。

私はXを見つけるためのコードを付けました(このレベルでは回転は考慮されていません)。また、スクリーンショットも分かりやすく表示されます。

ありがとうございます。

private function init(e:Event = null):void{ 
     var maxX:int = stage.width 
     var freeSpace:int = 300 
     var startX:int = Math.ceil(Math.random() * (maxX - (freeSpace+this.width))) + freeSpace;  
     this.x = startX 
    } 

答えて

0

うまくいけば、これらの提案が役立ちます::

次に、あなたがこの2行の交点を見つける必要があるだろう、式はここで見つけることができます

  • 表示オブジェクトに対してlocalToGlobal()関数を使用すると、その表示コンテナ内の回転、平行移動、および拡大縮小された点をステージに戻すことができます。例、$ p:Point = myMovieClip.localToGlobal(新しいPoint(10、10));
  • Matrixは、ポイントを回転させるのに便利な方法です。例、var $ mtx:Matrix = new Matrix(); $ mtx.tx = 10; $ mtx.ty = 10; $ mtx.rotate();そして今$ mtx.txと$ mtx.ty回転した結果を持って

は、これらは、おそらくあなたの質問に答えていますが、私は念のためにそれらを言及したいと私はより複雑なものに入る前に考え出しました。 wvxvwのように、他の変数がなければ、あなたがしようとしている方程式を実際に解くことはできません。うまくいけば、これはあなたの特定の問題を解決する方法についていくつかの洞察を与えるだろう

import flash.display.Shape; 
import flash.geom.Point; 
import flash.display.Graphics; 
import flash.events.MouseEvent; 

var $s:Shape = new Shape(); 
addChild($s); 

var borderStart:Point = new Point(stage.stageWidth/2, stage.stageHeight/2); 
var borderRotation:Number = 45; 
var borderLength:Number = 800; 

var borderRad:Number = borderRotation * (Math.PI/180); 
var borderEnd:Point = new Point(borderStart.x + Math.cos(borderRad) * borderLength, borderStart.y + Math.sin(borderRad) * borderLength); 

stage.addEventListener(MouseEvent.MOUSE_MOVE, update); 

function update(e:MouseEvent):void{ 
    var $g:Graphics = $s.graphics; 
    $g.clear(); 

    //Drawing the rotated border 
    $g.lineStyle(3, 0xff0000, .5); 
    $g.moveTo(borderStart.x, borderStart.y); 
    $g.lineTo(borderEnd.x, borderEnd.y); 

    //Finding if and where mouseX collides with our border 
    if (stage.mouseX >= Math.min(borderStart.x, borderEnd.x) && stage.mouseX <= Math.max(borderStart.x, borderEnd.x)){ 
     var $x:Number = stage.mouseX; 

     //SOLVING HERE : Solve collision with X 
     var $percent:Number = ($x - borderStart.x)/(borderLength * Math.cos(borderRad)); 
     var $y:Number = borderStart.y + Math.sin(borderRad) * borderLength * $percent; 

     //Drawing to our collision 
     $g.lineStyle(1, 0xffff00, .6); 
     $g.moveTo($x, 0); 
     $g.lineTo($x, $y); 
     $g.lineStyle(2, 0xffff00, 1); 
     $g.drawCircle($x, $y, 3); 

     trace("----\nCollision @\t" + "x: " + $x + "\ty:" + Math.round($y)); 
    } 
} 

:私は線分でポイントにXを比較する際にYを検索する方法を示し、いくつかのコードを書きました。

0

私はあなたがそれを文言として、それを解決することは不可能ですので、私は、右の質問に答えるよ、というかむしろあなたはYだけで何もすることができることを受け入れなければならないだろうかどうかわからないんだけど... R^2上のベクトル空間内の点を見つけるには、(x、y)という2つのベクトルの基底が必要ですが、R^1にはベクトルしかありません。

しかし、「画面上の黒い線」の交差点、つまり、フィットしたい「形状」の最も低い点を通る任意の線と垂直線の交差点を探しているように見えます。あなたがどのような形にフィットしようとしているのかという質問からは分かりにくいですが、回転しない四角形の場合は、右下または左下になります。次に、水平線と「黒線」との間の角度と、矩形の水平線と下端との角度を比較することによって、どの点を選択するのかを見つけることができます。私はあなたの質問に完全にはよく分からないhttp://en.wikipedia.org/wiki/Line_intersection

関連する問題