Ik moet ik een object verplaatsen naar een x,y.
Maar mijn meetkunde is niet zo ontzettend goed...
Ik heb de distance, en ik heb de graden in welke richting het moet.

Ik probeer een function te maken, die dus het nieuwe coordinaat bepaalt met deze 2 waarden.
Ik heb dit ooit wel eens op school gehad, maar ik ben vergeten welke stelling/wet het was.

Om het wat beter uit te leggen:
Ik ben een programma aan het maken, dat een object verplaatst bij het bewegen van de muis.
Het middelste van het venster is een coordinaat, die noem ik:
clientx en clienty, daarbij heb ik de positie van de muis, mousex en mousey.
Uit dat heb ik de graden, en de afstand van de 2.
Maar als de muis van links komt ( 180 graden ) en de afstand is kleiner dan 200, dan moet het venster zich verplaatsen in de tegenovergestelde richting van de muis met de afstand van de muis, totdat de muis weer verder is dan 200.

In andere woorden, de muis duwt het venster.

Kan iemand mij in de goede richting sturen?

Snel in elkaar geflanst. Niet getest, ik weet niet zeker of het werkt. Dit zijn de basisprincipes van meetkunde. Zou zeer eenvoudig naar elke andere taal te vertalen zijn, elke taal heeft wel cos, tan en sin functies. Ook de functie degrees to radius zou in elke taal mogelijk moeten zijn. degrees to radians is alsvolgd:

<?
// zit ingebakken in php, niet in elke andere taal
function deg2rad ($deg) {
$rad = ($deg/360)*2*pi();
}
?>

<?
/*
function move()
Arguments:
$x starting point x
$y starting point y
$dist distance from starting point x,y
$deg angle in degrees from starting point x,y

returns:
array(x,y) with the point at distance $dist, and with angle $deg from starting point x,y
*/

function move ($x, $y, $dist, $deg) {
$rad = deg2rad($angle);
// tan a = overliggende lengte / aanliggende lengte
// sin a = overliggende lengte / schuine lengte
// cos a = aanliggende lengte / schuine lengte
// aan = schuin * cos alpha
$deltaX = $dist * cos($rad);
$deltaY = $dist * sin($rad);

$absX = $x + $deltaX;
$absY = $y + $deltaY;

return array($absX, $absY);
}

?>
Mmm, als het php was, had ik het niet in de koffiehoek gezet maar..
Ik begrijp wat er staat.

Maar ondertussen was ik er aan bezig, en zo te zien zat ik niet verkeert.

C++.

double Deg2Rad( double degrees ) { return (degrees * PI / 180); }

void PushClient( int distance, int degree )
{
int x = 0, y = 0;
degree = degree + 180;
if (degree >= 360) {
degree = degree - 360;
}
if (degree <= 0) {
degree = degree + 360;
}

x = client.x + distance * Cos( Deg2Rad( degree ) );
y = client.y + distance * Sin( Deg2Rad( degree ) );

Form1->Edit1->Text = distance;
Form1->Edit2->Text = GetMouseAngle();
Form1->Edit3->Text = degree;
Form1->Edit4->Text = GetMouseDistance();

Form1->Left = x + ( Form1->Width / 2 );
Form1->Top = y + ( Form1->Height / 2 );

}

Het enige verschil wat ik zie is dat jij bij deg2rad * 2 doet? en dat je deelt door 360, maar ik denk dat dat wel 180 moet zijn.
Ik ga het eventjes proberen, maar wat ik had wekte voor een halfe meter :)

Maar bedankt, nu weet ik zeker dat ik in de goede richting zat.
Ja, je hebt gelijk. Mijn wiskunde is roestig, je oplossing lijkt te kloppen, laat anders even weten of het gelukt is.

Reageren