[Alg] Berekenen bounding box van gedraaid object

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Thomasje
  • Registratie: Augustus 2002
  • Laatst online: 29-05-2024
Op dit moment ben ik met een project bezig in flex. Ik gebruik daar een implementatie van ObjectHandles. Er zit alleen een probleem bij het roteren van objecten. In de ObjectHandles kan je een movement constraint invoeren. Bij niet gedraaide objecten gaat dat goed. Bij gedraaide objecten neemt hij zijn oude waarde.

Aangezien ik niet de code van ObjectHandles wil aanpassen wil ik de movement constraint aanpassen. Dit wil ik doen door het uitrekenen van de bouding box van een gedraaid object. Dit doe ik door het berekenen van de nieuwe coördinaten. Voor de x gaat het goed maar de y waarde zit ik fout te denken en kom er niet uit.

code:
1
2
3
4
5
6
7
8
9
10
11
var ra = oSelectedModel.rotation * Math.PI / 180;
                
var p1x = oSelectedModel.x;
var p2x = p1x + ( Math.cos(ra) * oSelectedModel.width);
var p3x = p2x - ( Math.sin(ra) * oSelectedModel.height);
var p4x = p1x - ( Math.sin(ra) * oSelectedModel.height);
                
var p1y = oSelectedModel.y;
var p2y = p1y + ( Math.sin(ra) * oSelectedModel.width);
var p3y = p2y + ( Math.cos(ra) * oSelectedModel.height);
var p4y = p1y - ( Math.cos(ra) * oSelectedModel.height);


De nieuwe lengte kan ik uitrekenen door de kleinste x en de grootste x van elkaar af te trekken.

Wat doe ik fout in mijn berekening voor y?

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Thomasje schreef op vrijdag 24 december 2010 @ 09:25:
De nieuwe lengte kan ik uitrekenen door de kleinste x en de grootste x van elkaar af te trekken.
Bij y is het toch ook gewoon een kwestie van de grootste en kleinste y vinden?

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Thomasje
  • Registratie: Augustus 2002
  • Laatst online: 29-05-2024
Woy schreef op vrijdag 24 december 2010 @ 09:30:
[...]

Bij y is het toch ook gewoon een kwestie van de grootste en kleinste y vinden?
Ja maar dan moeten de waardes van y wel kloppen.

Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 01:07

Reptile209

- gers -

Plot de punten die je nu voor y uitrekent eens in je model, dan zie je waarschijnlijk al meteen waar je mis gaat (+ of -, of een sin/cos omwisselen, zoiets). Of je moet de boel even op papier uittekenen, incl juiste orientatie van je coordinaatstelsel, om te zien wat je doet.

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • Thomasje
  • Registratie: Augustus 2002
  • Laatst online: 29-05-2024
Reptile209 schreef op vrijdag 24 december 2010 @ 09:41:
Plot de punten die je nu voor y uitrekent eens in je model, dan zie je waarschijnlijk al meteen waar je mis gaat (+ of -, of een sin/cos omwisselen, zoiets). Of je moet de boel even op papier uittekenen, incl juiste orientatie van je coordinaatstelsel, om te zien wat je doet.
Dat is een mooie manier geweest!

code:
1
var p4y = p1y - ( Math.cos(ra) * oSelectedModel.height);


Moet zijn

code:
1
var p4y = p1y + ( Math.cos(ra) * oSelectedModel.height);