[英]Calculate the 3rd point of an equilateral triangle from two points at any angle, pointing the “correct” way for a Koch Snowflake
問題標題可能需要一些工作。
在上下文中,這是出於Koch Snowflake的目的(在LabVIEW的公式節點中使用類似於C的數學語法),因此為什么三角形必須是正確的方式。 (給定2個點,等邊三角形可能在兩個方向之一上。)
簡要介紹一下算法:我有一個4個預定義坐標的數組,這些數組最初形成一個三角形,即分形的第一個“生成”。 要生成下一個迭代,必須為每條線(坐標對)獲得1 / 3rd和2 / 3rd中點作為該面上新三角形的基礎,然后計算該新點的第三點的位置三角形 (此問題的主題)。 對所有當前面執行此操作,將生成的數組連接到一個新數組中,以形成下一代雪花。
坐標數組按順時針順序排列,例如,圍繞形狀沿順時針方向移動的每個頂點對應於數組中的下一項,對於第二代來說,如下所示:
這意味着,當要在一個表面上(例如,在該圖像之間)將三角形標記為0和1時,您首先會得到中點,我將其稱為“ c”和“ d”,您可以旋轉“ d C‘”繞反 -clockwise’60度以找到新的三角形頂部點將(標記e
)。
我相信這應該在雪花周圍的任何地方都可以保持(例如,將較早的位置逆時針旋轉60度)在雪花周圍的任何地方 ,但是目前,我的數學似乎僅在初始三角形具有垂直邊的情況下有效:[[0,0) ,((0,1)]。 否則,三角形沿其他方向偏離。
我相信我已經正確構建了自己的循環,使得生成VI的三角形(虛擬儀器,實際上是書面語言中的“函數”)可以依次在每個線段上工作,但是我的實際計算無法正常工作,我很茫然如何向正確的方向發展。 下面是我目前用於從單個線段計算三角形點的數學運算,其中a
和b
是線段的原始頂點, c
和d
形成與原始線成一直線的新三角形底,而e
是零件伸出來。 我不想將其稱為“頂部”,因為從右上角到左下角的線段形成的三角形,“頂部”會一直向下。
cx = ax + (bx - ax)/3;
dx = ax + 2*(bx - ax)/3;
cy = ay + (by - ay)/3;
dy = ay + 2*(by - ay)/3;
dX = dx - cx;
dY = dy - cy;
ex = (cos(1.0471975512) * dX + sin(1.0471975512) * dY) + cx;
ey = (sin(1.0471975512) * dX + cos(1.0471975512) * dY) + cy;
注意1.0471975512
弧度僅為60度。
當前,對於第二代,它做到了這一點(請注意,左側看似分離的三角形是由頂部和底部的2個三角形組成的,它們的e
頂點在中間相交,實際上不是一個獨立的三角形。)
我懷疑取決於天氣ax
或bx
方程有必要稍有不同的等式的必要性更大等,也許與正弦/余弦的周期性可能需要考慮的原因有關(球面坐標中的象限?)就像錯放的三角形成60度一樣,只是角度在錯誤的線之間。 但是,這只是一個猜測,我只是無法想象如何以編程方式做到這一點,更不用說在紙上了。
值得慶幸的數學公式節點允許if和else語句這樣就可以讓此得以實施,如果是這種情況,但因為說我不是非常熟悉,在調整了什么,我會天真地稱之為“象限的事情”,而我不能確定如何知道每種情況下哪個象限。
這是一個漫長而漫不經心的問題,不可避免地會胡說八道,因此,如果您有任何澄清的問題,請發表評論,我將嘗試解決所有問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.