2013-05-16 64 views
1

我正在使用AS3。但是,這與我使用的語言無關。我只是找到如何解決這個問題的邏輯。如何知道給定起點和終點的直線上的點:任何公式?

我已經完成了創建一條線,繪製圖形類給出了一條線的起點和終點。現在我再畫一個圓圈。我希望那個圈子能夠穿過這條線。

我可以通過了解座標平面中線的起點和終點之間的點是什麼。

例如.. (0,0)和(20,20)

我可以遍歷通過此對象的值賦給行...

object.x = 5; 
object.y = 5; 
object.x = 10; 
object.y = 10; 
and so on and so forth.. 

我想我的物體圓從起點到終點來回移動,然後在遍歷線時再次返回到起點。

任何配方,你可以幫助我呢?我曾嘗試扣除並添加斜坡來遍歷線,但只有當斜率爲正值時才起作用。

注意:在閃光燈中,座標系與通常的笛卡爾平面不同。第四象限都是正面的。

這是我目前的邏輯:

var speed:int = 10; 

function makeItMove(packetNumber:int):void{ 
     var xcenter:int = xCenterPt[packetNumber]; 
     var ycenter:int = yCenterPt[packetNumber]; 
     var xfirst:int = xFirstPt[packetNumber]; 
     var yfirst:int = yFirstPt[packetNumber]; 
     var xsecond:int = xSecondPt[packetNumber]; 
     var ysecond:int = ySecondPt[packetNumber]; 
     var switchPath:Boolean = switchPathArr[packetNumber]; 
     var slope:int = 0; 

     if((xsecond-xfirst) != 0){ 
      slope = ((ysecond - yfirst)/(xsecond - xfirst)) * speed; 
     } 

     if(slope<0){ 
      //slope = ((ysecond - yfirst)/(xsecond - xfirst)) * speed; 
      slope = slope * -1; 
     } 
     //else if(slope) 

     //trace("PacketNumber: "+packetNumber+", xcenter: "+xcenter+", ycenter: "+ycenter+", xfirst: "+xfirst+", yfirst: "+yfirst+", xsecond: "+xsecond+", ysecond: "+ysecond) 
     if(xcenter <= xfirst && ycenter <= yfirst){ 
      switchPath = true; 
      switchPathArr[packetNumber] = switchPath; 
     } 

     if(xcenter >= xsecond && ycenter >= ysecond){ 
      switchPath = false; 
      switchPathArr[packetNumber] = switchPath; 
     } 

     if(switchPath){ 
      xcenter = xcenter+slope; 
      ycenter = ycenter+slope; 
      xCenterPt[packetNumber] = xcenter; 
      yCenterPt[packetNumber] = ycenter; 
      //trace("UP: xcenter = " + xcenter + ", ycenter = " + ycenter); 
      this[mc_Packets[packetNumber]].x = xcenter; 
      this[mc_Packets[packetNumber]].y = ycenter; 
     } 
     else{ 
      xcenter = xcenter-slope; 
      ycenter = ycenter-slope; 
      xCenterPt[packetNumber] = xcenter; 
      yCenterPt[packetNumber] = ycenter; 
      //trace("DOWN: xcenter = " + xcenter + ", ycenter = " + ycenter); 
      this[mc_Packets[packetNumber]].x = xcenter; 
      this[mc_Packets[packetNumber]].y = ycenter; 
     } 
    } 

回答

1

我會用一個載體。有了這個,你可以從兩個位置矢量中創建一個方向矢量。意味着減去兩個向量。 VectorA起點和VectorB結束點。

然後你改變長度值,vetor的x和y座標會相應地改變。

檢查這個類爲例:

http://code.google.com/p/as3ufw/source/browse/trunk/src/core/as3ufw/geom/Vector2D.as?r=93

這也是有幫助的: http://emweb.unl.edu/math/mathweb/vectors/vectors.html

您嘗試在上課前:)

+1

我同意:)請先閱讀本@flashMark改變你設置幅度屬性的長度。所以一旦你有差異向量(通過從結尾減去開始),你可以通過從幅度屬性獲取值來找到當前的距離。然後在for循環中將i設置爲0,並按大於0且小於距離的值遞增。對於每個循環設置值與i值,並檢索x和y點, – Allan

+0

謝謝無論如何先生larusso。如果可能的話,我會嘗試一段時間。對於艾倫爵士,你給了我一個關於點距離的想法。 我會在這裏反饋,如果我做到了。非常感謝你們。 – flashMark

相關問題