2017-01-18 76 views
2

我在畫布上繪圖,我想在兩個其他點之間得到一個點的長度。我有:通過兩點之間的長度獲取座標

let uno = {x:100, y:200}; 
let dos = {x: 900, y:2000}; 
let length = 20; //px 

我怎樣才能得到UNODOS的距離以像素爲單位長度之間的點(從UNO開始)? 實施例的圖像中的

attachment

+0

[查找線路上的點]的可能的複製(http://stackoverflow.com/questions/1934210/finding-a-point-on-a-line) – Rafael

+0

注有數學網站堆棧交換網站的網站,其中有問題的答案:http://math.stackexchange.com/q/155514 –

+0

可能重複[查找兩點之間的點的座標?](http:// stackoverflow。 com/questions/2886092 /發現座標點之間的兩點)這說明它是關於WPF,但它是基本的數學。 –

回答

4

使用三角學:

function lenpoint(x1, y1, x2, y2, len) { 
    var dx = x2-x1, 
     dy = y2-y1; 
    var theta = Math.atan2(dy, dx); 
    var xp = len * Math.cos(theta), 
     yp = len * Math.sin(theta); 
    return [xp + x1, yp + y1]; 
} 
+0

這幾乎就是......只需要[xp + x1,yp + y1] –

+0

謝謝,更正:) – Giladd

0

嘗試這種情況:

let uno = {x:100, y:200}; 
 
let dos = {x: 900, y:2000}; 
 
let length = 20; //px 
 

 
let point = { 
 
    x: findPoint(length, uno.x, dos.x), 
 
    y: findPoint(length, uno.y, dos.y), 
 
} 
 

 
console.log(point); 
 

 
function findPoint(d, a, b) { 
 
    return d * (b - a) + a; 
 
}

基於https://math.stackexchange.com/a/1625335 ;我自己沒有測試過。

+0

確定結果是正確的。你應該先用'uno'和'dos'之間的長度來劃分 –

+0

@ibrahimmahrir我不是遵循你所說的話(對不起,數學不太好)。如果您可以使代碼更加智能化,請隨時編輯。 – RyanZim

4
function getCoordinateByLength(point1, point2, length){ 
    var dx = point2.x - point1.x; 
    var dy = point2.y - point1.y; 
    var distance = Math.sqrt(dx * dx + dy * dy); 
    if(distance == 0) 
     return {x: point1.x, y: point1.y}; 

    var rx = point1.x + (point2.x - point1.x) * length/distance; 
    var ry = point1.y + (point2.y - point1.y) * length/distance; 
    return {x: rx, y: ry}; 
}