PDA

Volledige versie bekijken : Line-line Collision Detection vraagjes


Jordy
%Europe/Berlin %909 %2005, 21:49
Hey!

Even een vlug vraagje. Ik ben bezig met Line-Line collision detections maar ik weet niet wat nou precies de "slope" en de "intercept" van een lijn is :).
Ik werk uit het boek: Flash MX 2004 game design demistified. En daar geven ze de volgende code op voor het tekenen van een lijn:


_root.createEmptyMovieClip("clip", 1);
clip.lineStyle(0, 0x000000, 100);
var line1:Object = {};
line1.m = 1;
line1.b = 100;
function findY(line:Object, x:Number) {
var y:Number = line.m*x+line.b;
return y;
}
function drawLine(line:Object) {
//Choose an x
var x:Number = 300;
//Find the y
var y:Number = findY(line, x);
//Move the pen
clip.moveTo(x, y);
//Choose another x
x = 0;
//Find the y
y = findY(line, x);
//Draw line
clip.lineTo(x, y);
}
drawLine(line1);


Tnx!!

edit:
Nog direct een vraag erbij ;)
de lijn var y:Number = findY(line, x); snap ik niet zo goed, bij de functie findY moetje 2 parameters opgeven, bij de ene geef je "line" op en bij de ander "x". "x" heeft een waarde van 300, maar wat is dan "line"? Die bestaat toch helemaal niet :S. (of zie ik dit verkeerd)

Roenes
%Europe/Berlin %919 %2005, 22:04
de lijn var y:Number = findY(line, x); snap ik niet zo goed, bij de functie findY moetje 2 parameters opgeven, bij de ene geef je "line" op en bij de ander "x". "x" heeft een waarde van 300, maar wat is dan "line"? Die bestaat toch helemaal niet :S. (of zie ik dit verkeerd)line is het object line1. Deze komt doordat je aan de functie drawLine een parameter meegeeft. Deze parameter is line1. in de functie wordt die voorgesteld door de naam line. Deze line geef je dus mee in findY. Dus de line die in die regel wordt gebruikt komt overeen met line1. Maar ik vind dat Jobe wel wat duidelijkere namen had mogen gebruiken ;) Want dit is idd wat lastig om te begrijpen.. :)

Ik ben bezig met Line-Line collision detections maar ik weet niet wat nou precies de "slope" en de "intercept" van een lijn is :)De slope van een lijn is de helling van de lijn. Ken je de term hellingsgetal? Daarmee wordt bedoelt hoeveel er bij de y wordt opgeteld per verplaatsing van 1 unit over de x as. Simpelweg: hoeveel ga je omhoog (of omlaag) per stap op de x as. :)

De intercept stelt simpelweg de y waarde voor wanneer x 0 is. Dus waar snijd de lijn de y-as bij waarde x=0 :)

Hopelijk is het duidelijk, en anders hoor ik het wel :)

Jordy
%Europe/Berlin %932 %2005, 22:23
kijk dat is duidelijke taal :) tnx, ik ga er weer mee verder. Ik denk dat ik nog wel wat vraagjes heb, maar die post ik tegen die tijd wel.
Tnx roenes :thumbs-up:

Jordy
%Europe/Berlin %935 %2005, 22:26
Opzich snap ik de code van hierboven (mijn eerste post) wel, maar toch lastig om zelf de beredeniring te maken over hoe het werkt. Misschien is dit een hele rare vraag hoor ;) maar kan iemand het script uit mijn startpost naar nederlandse taal (niet AS maar gewoon echte woorden met zinnen ;) ) vertalen :#

Roenes
%Europe/Berlin %954 %2005, 22:54
Ik gok dat je de functies bedoelt? Want die declaratie erboven begrijp je lijkt me wel? Nou gaan we beginnen:

function findY(line:Object, x:Number) {
var y:Number = line.m*x+line.b;
return y;
}
function findY(line:Object, x:Number){ == functie vindY heeft 2 parameters nodig genaamd line en x. line is van het type Object (oftewel: kan alles zijn) en x is van het type Number. Er moet dus een getal worden ingevuld.

var y:Number = line.m*x+line.b; == variabele y is van het type Number en bestaat uit line.m*x+line.b; Wat gebeurt daar? variabele m van het object line keer de parameter x plus variabele b van het object line. Dit getal stelt y na de berekening voor.

return y; == geef getal y terug aan het eind van de functie.

Dat was de korte methode ;) Nu de lange:


function drawLine(line:Object) {
//Choose an x
var x:Number = 300;
//Find the y
var y:Number = findY(line, x);
//Move the pen
clip.moveTo(x, y);
//Choose another x
x = 0;
//Find the y
y = findY(line, x);
//Draw line
clip.lineTo(x, y);
}
drawLine(line1);
function drawLine(line:Object) { == functie drawLine heeft 1 parameter nodig. Deze parameter heet line en is van het type Object.

//Choose an x
var x:Number = 300; == variabele x is van het type Number en stelt het getal 300 voor (dit is de start xpositie van de lijn)

//Find the y
var y:Number = findY(line, x); == variabele y is van het type Number en is het volgende cijfer: findY(line, x); Wat staat daar? methode findY wordt aangeroepen met 2 parameters genaamd line en x. x is 300 want die staat er pal boven. line komt overeen met line1 omdat deze de parameter is die is ingegeven bij drawLine. deze line bevat de slope en intercept van de lijn die wordt getekend. Waarom toch deze functie? omdat je nu gaat uitrekenen welke y waarde er hoort bij x 300. Deze y waarde moet voldoen aan de definitie van de lijn die we willen tekenen. (dus slope 1 en intercept 100)

//Move the pen
clip.moveTo(x, y); == til de pen op en zet die op positie x,y (oftewel 300 bij uitkomst van de regel erboven)

//Choose another x
x = 0; == kies een andere x waarde. Dit is het eindpunt van de lijn die we tekenen. Deze waarde is 0.

//Find the y
y = findY(line, x); == Vind de Y waarde bij een x van 0. Zie voor gedetailleerde uitleg iets omhoog :)

//Draw line
clip.lineTo(x, y); == Trek een lijn vanaf de moveTo positie naar de positie die x, y voorstelt. x = 0 en y is boven gevonden waarde.

Na deze regel stopt de functie en is er een lijn getekend die voldoet aan de definitie van het line1 object. :) Hopelijk maakt bovenstaande wat duidelijk zodat je inzicht hebt wat er precies gebeurt :) En zo niet, dan hoor ik het wederom :)

Jordy
%Europe/Berlin %343 %2005, 08:14
ik kan weer verder :D. Goede uitleg, dit had ik nodig om ook zelf op het idee te komen om zo een lijn te gaan tekenen. :D kan niet vaak genoeg bedankt zeggen ;)

ps: ik mag niet nog eens rep. punten aan je geven [}:|]

SaphuA
%Europe/Berlin %418 %2005, 10:03
Kan iemand mij vertellen waar die m en die b in die lijn voor zijn? :D

Jordy
%Europe/Berlin %558 %2005, 13:24
De slope van een lijn is de helling van de lijn. Ken je de term hellingsgetal? Daarmee wordt bedoelt hoeveel er bij de y wordt opgeteld per verplaatsing van 1 unit over de x as. Simpelweg: hoeveel ga je omhoog (of omlaag) per stap op de x as. :)

De intercept stelt simpelweg de y waarde voor wanneer x 0 is. Dus waar snijd de lijn de y-as bij waarde x=0 :)



eerder in dit topic uitgelegt :D

Roenes
%Europe/Berlin %567 %2005, 13:37
waarbij b staat voor de intercept en m voor de slope :)

@Jordy
Voor die rep punten moet je geloof ik eerst 20 andere mensen weer beoordeeld hebben. Maar maakt niet uit. Ik weet dat je de uitleg waardeerd en dat is genoeg :)