2012-11-15 51 views
2

假設我在笛卡爾座標平面上有兩個點,AB,其中的xy座標是雙精度float s。我如何找到點C的位置,它是它們之間距離的任意百分比?我怎樣才能找到一個點與另外兩個點之間的距離?

換句話說,用什麼方法代替「//Do magic to C」?請記住,AB每個由兩個double組成,它們分別代表它們的xy座標。

public static findProgressPoint(DoublePoint A, DoublePoint B, double position) 
{ 
    if (position > 1 || position < 0) //Ensure that position is between 0 and 1, inclusive 
    position = position - (int)position; 
    DoublePoint C = new DoublePoint(0.0, 0.0); 
    //Do magic to C 
    return C; 
} 
+0

你想要點C在線段A-B上嗎?或者你想要點*哪裏dist(A,C)= R * dist(B,C)?這將是一個誇張的IIRC。 – wildplasser

+0

**任意百分比**,你確定嗎?如果這個百分比<.5,那麼就沒有這個點......如果它是> .5,就有兩個這樣的唯一點......在這種情況下,我相信你需要一些三角函數來確定確切點... –

+0

@wildplasser其實,所有這些點的軌跡是一個圓。 – eh9

回答

4

這應該工作:

double px = x1 + (x2-x1)*position; 
double py = y1 + (y2-y1)*position; 
DoublePoint C = new DoublePoint(px, py); 

px處於距離x1正比於positionx1x2之間的x座標; py是對應的y座標。

+0

似乎運作良好! – Supuhstar

1
DoublePoint C = new DoublePoint(position * (A.x + B.x), position * (A.y + B.y)); 
+0

爲什麼-1?它工作完美!?! –

+0

我不是downvoter,但是當'position'不是'0.5'的時候,這真的有效嗎?例如,當'position'爲零時,它看起來像公式會返回'DoublePoint(0,0)',但它應該返回'DoublePoint(A.x,B.x)'。 '1'的位置也一樣... – dasblinkenlight

+0

是的,你是對的......斧頭+位置(Bx-Ax)是正確的...... –

相關問題