[DGD] the building blocks of grandiose worlds: geometry

Raymond Jennings shentino at gmail.com
Tue Aug 27 20:19:01 CEST 2013


So the gist of veiling is that insider and outsider is inherently
transitive, which is why it can be implied.

If object A is outside object B, and B is outside C, then we already know A
is outside C and we don't even have to ask.


On Tue, Aug 27, 2013 at 11:08 AM, Raymond Jennings <shentino at gmail.com>wrote:

> I should probably point out that in this process I'm trusting geometry
> queries to be honest.  Real geometry is consistent and allows for this to
> work.  This scheme will fail in a hurry if geometry handlers lie to the
> relation processing.
>
>
> On Tue, Aug 27, 2013 at 11:07 AM, Raymond Jennings <shentino at gmail.com>wrote:
>
>> 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