saneman wrote:
> ...
> class Box : public geometry_type
> {
> public :
> Box() {}
>
> virtual void haps(geometry_type* other)
> {
> other->collideWith(this);
> }
>
> virtual void collideWith(Sphere* other) {
> std::cout << "Sphere collision with Sphere" << std::endl;
Huh? This should be "Box collision with Sphere", shouldn't it?
> }
>
> virtual void collideWith(Box* other) {
> std::cout << "Box collision with Box" << std::endl;
> }
>
>
> };
>
> class Sphere : public geometry_type
> {
> public :
> Sphere() {}
>
> virtual void haps(geometry_type* other)
> {
> other->collideWith(this);
> }
>
> virtual void collideWith(Sphere* other) {
> std::cout << "Sphere collision with Sphere" << std::endl;
> }
>
> virtual void collideWith(Box* other) {
> std::cout << "Sphere collision with Box" << std::endl;
> }
>
>
> };
>
>
> void narrow_phase(geometry_type* G1, geometry_type* G2)
> {
> G1->haps(G2);
> }
>
> int main()
> {
> Box* BoxA = new Box();
> Sphere* SphereA = new Sphere();
>
> BoxA->collideWith(BoxA);
> SphereA->collideWith(BoxA);
>
> // Should print box collide with box.
> narrow_phase(BoxA, BoxA);
>
> // Should print sphere collide with box.
> narrow_phase(SphereA, BoxA);
No. Your 'haps' method essentially "swaps" the objects involved in the
collision (take a closer look at it): 'G1' from 'narrow_phase' becomes
'this' in 'haps'. So, it should print "Box collision with Sphere". And
it will, if you fix the error mentioned above.
> // Should print box collide with sphere.
> narrow_phase(BoxA, SphereA);
Again, no. For the very same reason it should print "Sphere collision
with Box". And that exactly what it prints.
> return 0;
>
> }
>
>
> But when I run main I get:
>
> Box collision with Box
> Sphere collision with Box
> Box collision with Box
> Sphere collision with Sphere
> Sphere collision with Box
>
>
> What goes on in the last two calls?
See above.
--
Best regards,
Andrey Tarasevich


|