簡體   English   中英

從任意角度的兩個點計算等邊三角形的第三個點,指出科赫雪花的“正確”方式

[英]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的三角形(虛擬儀器,實際上是書面語言中的“函數”)可以依次在每個線段上工作,但是我的實際計算無法正常工作,我很茫然如何向正確的方向發展。 下面是我目前用於從單個線段計算三角形點的數學運算,其中ab是線段的原始頂點, cd形成與原始線成一直線的新三角形底,而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頂點在中間相交,實際上不是一個獨立的三角形。)

嚴重破碎

我懷疑取決於天氣axbx方程有必要稍有不同的等式的必要性更大等,也許與正弦/余弦的周期性可能需要考慮的原因有關(球面坐標中的象限?)就像錯放的三角形成60度一樣,只是角度在錯誤的線之間。 但是,這只是一個猜測,我只是無法想象如何以編程方式做到這一點,更不用說在紙上了。

值得慶幸的數學公式節點允許if和else語句這樣就可以讓此得以實施,如果是這種情況,但因為說我不是非常熟悉,在調整了什么,我會天真地稱之為“象限的事情”,而我不能確定如何知道每種情況下哪個象限。

這是一個漫長而漫不經心的問題,不可避免地會胡說八道,因此,如果您有任何澄清的問題,請發表評論,我將嘗試解決所有問題。

感謝@JohanC回答我自己的問題,毫不奇怪,這是在進行正確調整之前進行許多細微調整並放棄的情況。

正確的公式是這樣的:

ex = (cos(1.0471975512) * dX + sin(1.0471975512) * dY) + cx;
ey = (-sin(1.0471975512) * dX + cos(1.0471975512) * dY) + cy;

只需在第二個正弦函數上加上減號即可。 請注意,如果一個人沿逆時針方向行駛,那么一個人將要沿順時針方向旋轉點,因此您將第一個正弦函數取反,而第二個正弦函數取反。

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM