Thread Rating:
  • 2 Vote(s) - 3 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Wyznaczenie w świecie "nieregularnej" figury
#1
Siema. Osoba bardziej doświadczona za pewno będzie umiała rozwiązać ten problem z którym taki amator jak ja sobie nie radzi.
Chodzi o to, że mam do wyznaczenia obszar w grze, po którym gracz może się poruszać. Albo wchodzi na ten obszar i coś się dzieje. I jest on nieregularny, na przykład:

[Image: 3075618900_1463234518.png]

Pobrałem sobie współrzędne tych boków. NO i teraz co tu zrobić? Na pewno muszę to potraktować jako układ współrzędnych (no bo to jest układ współrzędnych  Big Grin ). Dolny bok wyznaczy mi dziedzinę. I teraz jak? Muszę liczyć funkcję liniową w zależności od X gracza (ograniczonego dziedziną)? A później sprawdzać czy punkt w którym gracz się znajduje jest to odpowiednio większy/mniejszy od wzoru tej funkcji?
Nie jestem najlepszy z grafiki i nie pokaże mi o co tu mi chodzi. Chodzi o to, że biorąc nie punkt tylko dany bok mogę zakreślić ten kształt, decydując czy wymagane współrzędne są nad czym pod bokiem.

A może po prostu biorę wszystkie X i Y punktów (Z pomijam, bo to wysokość) i po prostu dać > lub < w zależności gdzie ma być gracz i to wyjdzie samo?
Nie będzie mnie do sierpnia, jestem w Szkocji i zarabiam na studia. Do zobaczenia.
Reply
#2
http://warsztat.gd/wiki/Punkt+wewn%C4%85...ok%C4%85ta - wzór
Reply
#3
Code:
local Area =
[
    [
        [27053.8,6615.97],
        [26767.4,7750.68],
        [28352.8,8536.55],
        [27505.7,9774.55],
        [26889.1,11476.5],
        [25861.4,11253.9],
        [25398.9,11674.8],
        [25093.5,13751.5],
        [23776.9,17346.9],
        [25107.6,18269.1],
        [28595.6,18880.4],
        [29766.1,18041.4],
        [30298.6,15819.1],
        [31696.3,15068.4],
        [31775.1,14483.5],
        [31365.6,12170.8],
        [31939.0,11279.1],
        [33070.4,9073.48],
        [29099.4,8322.86]
    ],
    [
        [-1393.22,-1521.51],
        [-3254.69,-4858.70],
        [-3691.17,-7038.54],
        [-3267.29,-9718.79],
        [1986.90,-9801.11],
        [2455.40,-7937.29],
        [2880.52,-6122.21],
        [3217.99,-4196.10],
        [1525.71,-2190.86],
        [1304.52,-1499.52]
    ],
    [
        [-33375.0,26014.5],
        [-32395.7,24372.8],
        [-31140.5,23656.2],
        [-31045.4,23471.9],
        [-31420.5,23143.1],
        [-32671.7,23924.1],
        [-32801.9,18177.5],
        [-33855.6,15486.2],
        [-34768.4,14141.6],
        [-39231.9,16779.3],
        [-34267.0,29688.3]
    ]
]

function checkAreaPoint(id, x, y)
{
    local polyCorners = Area[id].len();
    local i = 0;
    local j = polyCorners - 1;
    local isInArea = false;
    for (i = 0; i < polyCorners; i++)
    {
        if (((Area[id][i][1] < y && Area[id][j][1] >= y) || (Area[id][j][1] < y && Area[id][i][1] >= y)) && (Area[id][i][0] <=x || Area[id][j][0] <= x))
            if ((Area[id][i][0] + (y - Area[id][i][1]) / (Area[id][j][1] - Area[id][i][1]) * (Area[id][j][0] - Area[id][i][0])) < x)
                isInArea = !isInArea;
        j = i;
    }
    return isInArea;
}
Wilk Morski Klanu Espadre
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)