Archief - [PROG]VB.net Intelligent walk

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

2oo4

Legacy Member
Hey,

Wij willen een object laten "lopen" over het veld van punt A naar punt B.
Laten we het Object Brian noemen...

Nu lukt dit eerste gedeelte wel met gemak, geen probleem.

Alleen als wij nou een ander object op de "weg" plaatsen waarop Brian loopt gaat die er dwars doorheen...

Laten we het Object Steen noemen.

Nu Brian dus dwars door de steen loopt is het nog steeds hetzelfde effect, maar wat wij willen is dat Brian OM de steen HEEN loopt en dus NIET erdoor... :confused:

Hoe kunnen we Brian om de steen heen laten lopen?

Tyfius

Legacy Member
Een grens aan die steen vasthangen, en if brain is close to steen then walk arround...

2oo4

Legacy Member
Tyfius zei:
Een grens aan die steen vasthangen, en if brain is close to steen then walk arround...

Mja, hoe zou je dat dan moeten doen....

Je zou mbv die collision moeten berekenen of die dichtbij is, en is die dan dichtbij dan moet de computer gaan berekenen hoe moet ik er omheen, maar dat zijn wel meer dan 100 berekeningen...

Of zit ik nou fout?

Over dat collision verhaal dat is voor vb6.. even kijken of dit ook in .net wil.

Krueger

Legacy Member
Ik denk dat je best wat opzoekingswerk doet ivm path finding.
Deze houden algoritmes in hoe Brian zijn weg kan vinden rond de steen. Die algoritmes zijn meestal wel niet zo eenvoudig.

Hale

Legacy Member
een "eenvoudige" methode is om te werken aan de hand van een gradient veld. Je steen ( aka het voorwerp waar je rond wilt lopen ) zendt een positieve waarde uit die zich doorheen de omgeving verspreidt (de waarde neemt steeds af naar 0 naarmate je verder van de steen bent ) en de plaats waar je brian wil laten geraken zendt een negatieve waarde uit die zich doorheen de omgeving verspreidt ( de waarde neemt toe naar 0 als je verder van dat punt gaat staan ).
Visueel krijg je dan een 3D ruimte met een functie oppervlak bestaande uit ergens een vallei ( punt B ) en ergens een bergtop ( de steen ). Nu kan je je robotje doorheen de ruimte laten bewegen door hem de omgekeerde gradient van dat functie-oppervlak te laten volgen. De enige moeilijkheid is het opstellen van dat functieoppervlak, maar als je bijvoorbeeld werkt adhv een 2D grid die je omgevingsplattegrond voorstelt is dit redelijk triviaal, anders moet je expliciet een functie opstellen en daar de gradient van berekenen ( partieel afleiden naar de X en Yas, waarbij de X en Y as het grondvlak voorstellen ).

2oo4

Legacy Member
Hale zei:
een "eenvoudige" methode is om te werken aan de hand van een gradient veld. Je steen ( aka het voorwerp waar je rond wilt lopen ) zendt een positieve waarde uit die zich doorheen de omgeving verspreidt (de waarde neemt steeds af naar 0 naarmate je verder van de steen bent ) en de plaats waar je brian wil laten geraken zendt een negatieve waarde uit die zich doorheen de omgeving verspreidt ( de waarde neemt toe naar 0 als je verder van dat punt gaat staan ).
Visueel krijg je dan een 3D ruimte met een functie oppervlak bestaande uit ergens een vallei ( punt B ) en ergens een bergtop ( de steen ). Nu kan je je robotje doorheen de ruimte laten bewegen door hem de omgekeerde gradient van dat functie-oppervlak te laten volgen. De enige moeilijkheid is het opstellen van dat functieoppervlak, maar als je bijvoorbeeld werkt adhv een 2D grid die je omgevingsplattegrond voorstelt is dit redelijk triviaal, anders moet je expliciet een functie opstellen en daar de gradient van berekenen ( partieel afleiden naar de X en Yas, waarbij de X en Y as het grondvlak voorstellen ).

Wij zijn ondertussen ook al verder aan het brainstormen geweest. En we kwamen op het volgende idee:

Om de steen tekenen we een rondje.

Zodra Brian tegen dat rondje aan loopt stopt brian met lopen en onthoud het programmma/spel de Y as waar brian is gestopt met lopen, want hij kan niet in het vlak van het rondje komen. Dit doen we dmv collision.

Op het moment dat brian dan stopt moet de computer alle X en Y coordinaten gaan berekenen van het halve rondje. Aangezien brian er maar voor de helft omheen hoeft.

Wat brian dan doet is die X en Y coordinaten gewoon aflopen/volgen en op het moment dat hij dan weer bij punt Y is waar die is gestopt met lopen gaat die weer omhoog om vervolgens bij punt B uit te komen.

Een vrij simpele methode dus, maar is het volgens jullie ook in de praktijk mogelijk?

killgore

Legacy Member
wa gij doet is gewoon collision detection dmv omhullenden, in u geval een cilinder (de vgl van een rondje op de grond geeft in 3D de vgl van een cilinder :p). Dit wordt meer als genoeg toegepast, dus -> ja het is praktisch mogelijk.

Hoewel als ge verder wilt gaan (ingewikkelder, algemener) om de verdere route te bepalen ge u best eens aan de studie van pathfinding algorithms waagt (en grafen int algemeen).

Hale

Legacy Member
de veralgemeende oplossing zoals ge het nu van plan zijt, is het berekenen van de minkowski som van uw steen en de robot. Je moet maar is googlen op minkowski + pathfinding of minkowski + robotics ; dan zal je wel het een en ander vinden

MacK

Legacy Member
Hale zei:
een "eenvoudige" methode is om te werken aan de hand van een gradient veld. Je steen ( aka het voorwerp waar je rond wilt lopen ) zendt een positieve waarde uit die zich doorheen de omgeving verspreidt (de waarde neemt steeds af naar 0 naarmate je verder van de steen bent ) en de plaats waar je brian wil laten geraken zendt een negatieve waarde uit die zich doorheen de omgeving verspreidt ( de waarde neemt toe naar 0 als je verder van dat punt gaat staan ).
Visueel krijg je dan een 3D ruimte met een functie oppervlak bestaande uit ergens een vallei ( punt B ) en ergens een bergtop ( de steen ). Nu kan je je robotje doorheen de ruimte laten bewegen door hem de omgekeerde gradient van dat functie-oppervlak te laten volgen. De enige moeilijkheid is het opstellen van dat functieoppervlak, maar als je bijvoorbeeld werkt adhv een 2D grid die je omgevingsplattegrond voorstelt is dit redelijk triviaal, anders moet je expliciet een functie opstellen en daar de gradient van berekenen ( partieel afleiden naar de X en Yas, waarbij de X en Y as het grondvlak voorstellen ).

Kewl, nooit gedacht dat gradientvectoren voor zoiets werd gebruikt (weinig programmeerervaring, maar wel ambities ;) ) . Maar het lijkt wel allemaal te kloppen zo, gradientvector duidt idd de snelst stijgende richting .. Leuk om wiskunde eens in een andere context toegepast te zien worden !

killgore

Legacy Member
MacK zei:
Kewl, nooit gedacht dat gradientvectoren voor zoiets werd gebruikt (weinig programmeerervaring, maar wel ambities ;) ) . Maar het lijkt wel allemaal te kloppen zo, gradientvector duidt idd de snelst stijgende richting .. Leuk om wiskunde eens in een andere context toegepast te zien worden !
w8 maar :D

In multimedia (gamedev en dergelijke) hebde zowa de zwaarste wiskunde-toepassingen binnen commerciële informatica.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan