Archief - Meetkundig vraagstuk

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.

RipTor

Legacy Member
Mensen ik heb even een vraagstuk meetkunde. Vroeger had ik het waarschijnlijk zelf kunnen oplossen maar tegenwoordig :$

Ik wil een plugin maken voor de game rFactor (racesim) die het afsnijden van bochten logged.

Een rFactor circuit bestaat uit veel kleine korte rechte stukjes. Deze worden allemaal opgegeven door een begin- en eind-coördinaat.
Daarnaast heeft ieder punt een afstand naar links en naar rechts die opgeeft hoe breed de baan is (waar de witte lijnen liggen).

Een voorbeeld van een oversimplistische bocht :

abc.png


De coördinaten van punten 1, 2, 3 en 4 zijn dus gekend. De rode lijnen moet de code berekenen en liggen in een hoek van 90° op de eindpunten van de zwarte lijnen. Het is ook gekend hoeveel de rode lijn links van de zwarte lijn komen, en hoeveel eenheden rechts (maar je moet dus rekening houden dat de rode lijnen niet altijd perfect horizontaal lopen dus ge kunt niet gewoon dat aantal van X aftekken).

Hoe kunt ge de coordinaten van de rode lijnen berekenen ?

Stel dat de coordinaten van de zwarte punten de volgende zijn:
1: 0, 0
2: 0, 2
3: 1, 3
4: 3, 3

En de gegevens van de rode lijnen :
2: Links: 1 ; Rechts 2
3: Links: 1 ; Rechts 2


Een wiskundige oplossing is ok of een Java oplossing nog beter :) (mogelijks zitten de nodige functies in graphics2D hiervoor maar ik zie ze niet direct).
Indien het een Java oplossing is graag een functie in deze vorm :
public Line2D.Double berekenCpLine(Line2D circuitLijn, float leftDistance, float rightDistance)

killgore

Legacy Member
Code:
float x = (float)(circuitLijn.getX2()-circuitLijn.getX1());
float y = (float)(circuitLijn.getY2()-circuitLijn.getY1());

float dx = y/sqrt(x*x+y*y);
float dy = -x/sqrt(x*x+y*y);

float x1 = circuitlijn.getX2()-dx*leftDistance;
float y1 = circuitlijn.getY2()-dy*leftDistance;
float x2 = circuitlijn.getX2()+dx*rightDistance;
float y2 = circuitlijn.getY2()+dy*rightDistance;

Line2D nieuweLijn = new Line2D.Float(x1,y1,x2,y2);

Iets in die aard is het, het kan wel zijn dat ik enkele - en + tekens heb omgedraaid dus daar moet je mssch nog mee spelen, kheb het niet nagerekend of uitgetest ;-).

RipTor

Legacy Member
Merci man ! Respect ook, indrukwekkend :)

cba.png



De rest is vrij eenvoudig (aangezien ik al een live trackviewer enzo heb gemaakt) dus komt helemaal in orde :)
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