2010-11-15 73 views
4

我想使用JavaScript在HTML5 canvas元素上繪製可變數量的等距點。我如何計算每個點的X/Y位置?畫布上的等距點

編輯:

我想從一個點到其直接鄰居和畫布邊緣的距離是一樣的。
如果我有一個8像素×8像素的畫布和4個點,從一個點到它的直接鄰居和畫布邊緣的距離將是2px。
但是,如果我有不均勻點數而不是方形畫布?
(我認爲的圖像可能有助於理解我的問題好一點)

equidistant points

+0

在這種情況下,術語「直接鄰居」有點模糊。你需要一個更好的定義。 – ysap 2010-11-16 03:22:29

+0

感謝您的回答。我想你是對的。我需要做一些素描,然後才能給你一個'直接鄰居'的更好的定義... – snorpey 2010-11-16 23:12:52

+0

這個怎麼樣:M = {p_1,p_2,...,p_n}被認爲具有相等的距離d iff:對於每個p_i元素M:p_i具有距離最近邊緣的距離<= d並且存在p_j元素M,使得| p_i_p_j | = d – artistoex 2010-11-22 15:34:03

回答

2

我建議建立一個簡單的約束求解器 - 使用放鬆來達到你想要的答案。這與某些類似Visio的應用程序使用的技術類似。基本上,您可以在點對和畫布邊界之間添加彈力。你可以模擬很短的時間,一切都會「解決」到位。

你可以嘗試Box2DJS - 一個簡單的JavaScript物理系統。或者閱讀Verlet集成/約束 - 啓動和運行起來非常簡單,並且適用於這些類型的應用程序。

0

,如果你的意思是一系列從過去的等距點都在一條線上的,那麼你只需要採取的總距離的開始點和結束點沿着x軸和y軸之間除以總

因此要獲得點n(XN和YN與x0和y0是開始時)可以做

XN =( (xend - x0)/ number_of_points)* n

與y相同。

+0

更好的是,您可以修正增量並將其添加到最後一個點的座標。 – aaronasterling 2010-11-15 22:10:20

1

@snorpey - 你問基本上是安排點使得在給定半徑R,所有點半徑R,其中圓的中心:

  1. 所有「直接鄰居」(此需要更好的定義)在圓周上;
  2. 邊緣附近的所有圓點都與最近的邊緣相切。

我的直覺說,這個要求可能無法滿足給定任意數量的點,並給予鄰居更嚴格的定義,但我可能是錯的。

0

如果我用標籤「x px」來看你的圖並嘗試識別「直接鄰居」,我需要一些幫助。如果我們將中心點放在中心並嘗試確定其DN,則圖中的所有其他點都可以是DN。你想如何識別你的?