[DGD] the building blocks of grandiose worlds: geometry
Raymond Jennings
shentino at gmail.com
Tue Aug 27 20:07:13 CEST 2013
I agree, it's vague ^^ I'm still trying to come up with the terminology
too.
The basic idea is that I keep track of geometric (topologic?) relations
between neighboring objects.
WRT one object that holds the relation mapping, another object can be:
1. An insider (completely contained by us)
2. An intersecter (our boundaries criss cross)
3. An outsider (completely containing us)
4. An overlapper (our boundaries are perfectly congruent)
0. No relation at all
The default is 0, which as a nil is not even tracked, and any object not in
our relation map is assumed to be 0.
Now the immediately useful part:
First, direct neighbors:
Objects in sets 1, 2, or 4 have parts of themselves inside us, and qualify
for internal actions.
Objects in sets 2, 3, or 4 have parts of themselves outside us, and qualify
for external actions.
Second, indirect neighbors:
Additionally, objects in sets 2, 3, or 4 may have objects of their own
inside them, or in their own 1-, 2-, or 4- set.
The 1's, 2's, and 4's of our 2's, 3's, and 4's are external neighbors.
The 2's, 3's, and 4's of our 1's, 2,s and 4's are our internal neighbors,
and the rules of geometry (I think anyway) imply that those indirect
relations will also show up in our own 1's, 2's, or 4's
By querying these lists, I can find neighbors. This collection of
neighbors is the list of candidates for things like visibility,
interaction, targeting by nouns, and so on.
That is the immediate usefulness.
The second intended benefit: Any outsider or insider acts as a veil which
hides everything behind it from processing, which in a sizable world can
obviously cut way down on the O(N^2) potentials, since anything affecting
us from beyond that veil (no sirius black jokes please) has to go through
the veil to get to us, and since the outsider or insider is already keeping
track of us in its own relation list, anything that cares to find us can do
so easily once it hits the veil and peeks behind it.
This veiling effect also helps save on processing time when geometry
relations need to be checked for updating after an object moves. I don't
have to do a nasty O(N^2) check against everything else. If I change from
a 1 to a 2 for object B, I only have to look at object B's 1's and 2's and
4's to see who my new relations might be. Similiarly, if I become a 1 of
object B, I never have to look outside object B again to check anything.
This is all theoretical so far, but my prototype is working well enough
even now for the time being.
As a quick and dirty example, let's say you have a few objects:
object A is Fort Providence, and is a municipal zone.
object B is the county of Kolechistan
object C is Kolechistan's first police precinct
object D is Kolechistan's fourth fire district
object E is the state of Imporiton
object F is the great and glorious nation of Triskellia
object G is the state of Oregon.
A is completely inside B, and also completely inside C and D
B is completely inside E, and contains C and D
C and D, being under different departments of Kolechistan, are intersecting
each other, completely contain A, and are completely inside B
E contains A
F contains E
F contains G
Now, I have some optimizations already.
Because E completely surrounds B, it doesn't even show up as a relation at
all for A, C, or D. A, C, and D list B as their ousider, and can safely
ignore anything outside of B. Which means that anything inside Kolechistan
doesn't have to worry about the rest of Imporiton, or for that matter,
anything outside it such as F (Triskellia) and G (oregon). Object B acts
as a veil that hides objects E, F, and G from objects B and C, and
therefore from object A.
Additinally, anything outside of Kolechistan doesn't need to worry about
anything inside of it. Objects E, F, and G can completely ignore object
B's contents, since object E acts as a veil.
Now if due to political events, the borders change, I can run a geometry
check on any objects. If the check brings in new neighbors, I can check
against them as well, and if relations change I can then look for more
candidates.
However, I only have to check my neighbors. If after checking them, no new
candidates pop up, I can stop. Anything that remains an outsider cannot
possibly have anything interesting outside itself, and likewise for
insiders.
Now, if something happened outside that needed our attention, that
something would first have to pierce the borders of our outsiders, and if
it did that, it would then check our outsider's relations (including us).
or, to put it back in the example, if a rocket was launched from China and
made its way to Fort Providence, you can bet your bones that Triskellia's
air force radar would find out about it and the air force would warn
Imporiton's governor. Imporiton's governor, in turn would probably put the
police precinct and fire district on high alert by the time the rocket
impacted. Which is to say, that the rocket would have to go through
Triskellia's borders before Imporiton even saw it, and likewise through
Imporiton's borders before the police and fire districts saw it, and then
likewise for Fort Providence itself. Each penetration of a veil brings up
new objects to check for relations, and this process can recurse as needed
until everything resolves.
Since the police and fire zones intersect though, Fort Providence still has
to put up with jurisdictional squabbles.
I hope this clarifies my idea better.
On Mon, Aug 26, 2013 at 11:08 AM, Natasha Koroleva <
natasha.i.koroleva at gmail.com> wrote:
> Kind of vague description. I wonder there is a direction attribute for
> the relation (I assume this will be used for to handle exits)? Overlap
> includes some sort of index so that you know what is above and below
> the object?
>
> On Mon, Aug 26, 2013 at 10:51 AM, Raymond Jennings <shentino at gmail.com>
> wrote:
> > Ok, so I just implemented very basic geometry processing, that makes sets
> > of objects that are inside, outside, intersecting, overlapping, or not
> > related at all.
> >
> > This is the foundation for delegation and object hiding in my "colossal
> > galaxy with detail down to the room" scheme.
> >
> > The gist is that for any two objects, object B can be inside object A,
> > outside it, intersecting it, or overlapping it (same position and shape)
> >
> > Ultimately, the relation list will seed the candidate list when checking
> > for neighbors.
> >
> > Can anyone see any flaws in this design?
> > ____________________________________________
> > https://mail.dworkin.nl/mailman/listinfo/dgd
> ____________________________________________
> https://mail.dworkin.nl/mailman/listinfo/dgd
>
More information about the DGD
mailing list