PDA

Volledige versie bekijken : dynamisch roterenen adhv 2 punten


waldo_cosman
%Europe/Berlin %346 %2005, 09:18
Hallo

Ik heb dus in actionscript een lijn getekend(gebeurt dynamisch adhv een xml file). Bv je hebt een lijn van het punt 50,200 naar 150,300. Nu wil ik daar een voorwerp op plaatsen die langs die lijn passeert. Dat lukt, maar ik wil hem ook laten draaien in de richting naar waar de lijn gaat, dus rechts naar beneden. Ik weet dat het iets met cosinus of sinus zal zijn, maar ik zit wat vast qua berekeningen. Iemand dit al eens geprobeerd?

waldo_cosman
%Europe/Berlin %414 %2005, 10:57
Owk, heb het gevonden na wat zoeken, heb et zelf veel te ver gezocht:
gewoon stelling van pythagoras gebruiken:
(interval_x en y is verschil tussen de 2 punten);

stelling: tan(alpha) = X / Y

rad = Math.atan(interval_y/interval_x);
getalrad = 180/Math.PI;
graden = (rad*getalrad);

if (end_x<start_x) {
graden -= 180;
}
:#

kinkstar
%Europe/Berlin %790 %2005, 19:57
hmz ik heb hetzelfde probleem maar kan geen wijs worden uit wat je nou gedaan hebt...

rad = Math.atan(interval_Y/interval_X)

ik heb de coordinaten van de punten zo opgeslagen:

x1,y1

punt 2

x2,y2

hoe zet ik dat om naar interval?! (dat is toch 1 waarde?)

Dauntless
%Europe/Berlin %802 %2005, 20:15
Dit? Ff snel gemaakt...

kinkstar
%Europe/Berlin %909 %2005, 22:50
Geweldig hier heb ik wat aan! (dit is nog eens een antwoord!) *steekt pluim in de **** van Dauntless*

Dauntless
%Europe/Berlin %910 %2005, 22:50
Waar steek je die pluim ????

kinkstar
%Europe/Berlin %917 %2005, 23:01
dauntless Ik heb nog 1 vraagje... ik ben ongeveer het zelfde aant doen als jij... alleen mijn lijn lengte klopt niet... (ik gebruik een MC als lijn) , deAS:

var x1:Number = 0;
var y1:Number = 0;

var x2:Number;
var y2:Number;

var linelength;

var ml = new Object();
ml.onMouseDown = function()
{
if(x1 == 0 && y1 == 0){
x1 = _xmouse;
y1 = _ymouse;
trace("eerste klik is op:" + x1 + "," + y1);
}else{
x2 = _xmouse;
y2 = _ymouse;
trace("tweede klik is op:" + x2 + "," + y2);
checkdistance();
}

}
Mouse.addListener(ml);

function checkdistance()
{
var A = x2 - x1;
if(A < 0){ A = 0 - A;};
var B = y2 - y1;
if(B < 0){ B = 0 - A;};
var C = (A*A) + (B*B);
linelength = Math.round(Math.sqrt(C));
drawLine(linelength);
x1 = 0;
y1 = 0;
};

function drawLine(i)
{
_root.line._x = x1;
_root.line._y = y1;
_root.line._width = i;
_root.line._rotation = Math.atan2(y2 - y1, x2 - x1) / Math.PI * 180
_root.line.gotoAndPlay(2);
trace(linelength + "moet het zijn maar is:" + _root.line._width);
};



EDIT!: pluim in je r33t

xtr0
%Europe/Berlin %921 %2005, 23:07
haha zal dauntless fijn vinden:p;)

SaphuA
%Europe/Berlin %937 %2005, 23:30
Heb verder je cod eniet bekeken, maar ik denk dat het komt omdat je de MC rotate, dan is de width niet meer gelijk aan zijn lengte.

kinkstar
%Europe/Berlin %938 %2005, 23:32
dus eerst lengte doen dan draaien....? zou dat helpen klinkt logish genoeg niet?>

kinkstar
%Europe/Berlin %941 %2005, 23:35
nee werkt niet.... iemand anders een id?

mateo)
%Europe/Berlin %966 %2005, 00:12
zodra je die mc gedraaid hebt is de width van je mc iets anders dan de lengte van je mc. op zich klopt je berekening, alleen kan je die lijn beter tekenen. of je kan ook de width van een line mc in een placeholder mc veranderen. die placeholder mc kan je dan roteren.
trouwens de uitgecommentarieerde regels zijn overbodig:

var A = x2 - x1;
// if(A < 0){ A = 0 - A;};
var B = y2 - y1;
// if(B < 0){ B = 0 - A;};
var C = (A*A) + (B*B);