2011-09-19 92 views
13

Idealy我想提供一系列的點,並在每個點都有一條直角(從第二點開始)畫一條直線。每條線的方向將會交替出現,所以如果我碰巧繪製了一個由6個點組成的曲線,則會爲每個以第二個點開始的點繪製一個給定長度的線,也就是說,交替兩側會增加5條線的曲線,有點像一條腿交替的毛毛蟲。 (我知道這些線不會完全與曲線成直角,而是與曲線上任意兩點形成的直線成直角)。給定2分我如何在與兩點形成的直線上畫一條直線?

+0

您將繪製哪個庫? – Bas

+0

我正在使用Silverlight並使用InkPresenter,因此它只是一個點函數的例子,我想。 – descf

+0

http://stackoverflow.com/q/1243614/183120有一個解決方案類似於Andreas'(http://stackoverflow.com/a/7470098/183120) – legends2k

回答

30

這是一個問題vector mathematics。您可以通過從A中減去B來計算A點和B點之間的引導矢量。在2D中,只有在2D中,通過反轉x和y分量並將一個分量取爲負值,可以獲得與此矢量成直角的向量。如果你否定新的x分量,你會左轉,通過否定y你會右轉。然後,可以通過將每個分量除以矢量的長度(sqrt(x x + y y)),將導向矢量縮小爲單位大小(=長度1)。最後,您可以根據需要的長度再次拉伸單位矢量,並獲得您想要的大小之一。如果將此矢量添加到A或B,則會得到要繪製線條的點。

這裏有一個小數學題:

這是A和B點表示爲向量。

的引導矢量由一個簡單的減法計算。

該法線矢量通過翻轉導向矢量給定,即扭轉組件和使一種成分爲陰性。 NL =正常,翻轉到左側,NR =正常,翻轉到正常矢量的單位矢量被由向量的長度除以每個部件給予正確

計算一個矢量的長度

如果要(從A到來時)來繪製從B中的線向左你計算點P畫線爲

因此,當迭代點時,您希望一次繪製到左側,一次到右側。

如果你有點在你的畫布外面,那麼你的長度可能太大了。通過計算矢量BP和邊界的交點,當然可以計算出P的矢量將穿過邊界的點。

+1

我不能超過第一句話。如果我從A中減去B,結果可能會超出畫布。 – descf

+0

我編輯了我的答案,我希望它更容易理解。無論如何,計算不會在第一句後停止,你必須通讀整個答案。正如我所說的,將矢量大小縮小到單位距離,然後再根據所需的長度對其進行縮放。如果那超出了畫布,那麼你的長度太大或者畫布太小。 – Andreas

+0

我對自己的印象非常深刻,除了開始rno = – descf