簡體   English   中英

在超陣列中生成填充的多邊形

[英]Generating a filled polygon inside a hyperarray

考慮以下:

目前,我正在編程一個非常基本的地牢生成器。 現在,它的工作方式如下:

  1. 生成一個任意長度的int [] []超數組。

  2. 使用for循環將房間放置在此超數組(現在稱為迷宮)中的隨機坐標處,該循環用迷宮中的1填充房間的高度和寬度。 出於游戲引擎的目的,0表示不可穿越(隔離牆),而1表示玩家/敵人可穿越。

  3. 在0,0處啟動一個完美的迷宮生成器,然后運行直到房間之間的所有空間都充滿了走廊。

  4. 將房間連接到走廊,清除死角,剩下的是相互連接的房間系統。

像這樣

地牢

現在,我想讓這些房間變得爵士樂,因為它們只是扁平的矩形。 我現在需要做的是找到一種在int超數組內部生成多邊形的方法(坐標可能會做得很好,這不是問題),然后用1填充超數組中多邊形的空間(我在那我有麻煩)。

我正在嘗試弄清楚如何立即在整數數組中繪制線條。 我發現的是,我可以通過執行以下操作從一條點到另一點畫一條線:找到點1和點2的寬度和高度(x1-x2和y1-y2的絕對值,將寬度除以(高度-1)並從點1到點2,沿y軸單步移向點2,在x軸上按寬/高步移。

01000
01000
00100
00100
00010
00001

如果我采用寬度和高度,那么我從(1,0)到(x,y)到(4,5)有一條線,如果我除以3/5,我最終得到的寬度= 3高度= 5 0.6,因此對於y軸上的每一步,我都沿x軸進行0.6步(並限制結果值,因為我們只能將整數用作位置)並以坐標為結尾

(1,0)
(1.6,1) -> (1,1)
(2.2,2) -> (2,2)
(2.8,3) -> (2,3)
(3.4,4) -> (3,4)
(4,5) ->   (4,5)

這樣,您可以使用此線功能為多邊形的每個坐標對繪制這些線

x = x1 + (|(y1-y)| * ( |(x1-x2)| / |(y1-y2)| ) * sign(x2-x1))

其中x是每次迭代的當前x,沿着y軸的直線,x1表示您的起始x位置,x2表示您的結束位置y表示每次迭代的當前y(具體而言是循環中的實際計數器)y1和y2分別位於起始y和結束y位置。 和sign(x2-x1)可以幫助您確定從起始位置向左還是向右移動。

這樣,您應該能夠繪制多邊形的輪廓,並希望以后可以更容易地填充它。

我希望這對您有所幫助

編輯:我們為每對連續的坐標繪制線,而不是每對坐標。 意味着如果要從點p1,p2,p3,p4,p5繪制多邊形,則會在p1到p2,p2到p3,p3到p4,p4到p5和p5到p1畫一條線

只是一個簡短的旁注

暫無
暫無

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

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