Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Problème de points avec convexShape  (Lu 2731 fois)

0 Membres et 2 Invités sur ce sujet

yhu420

  • Jr. Member
  • **
  • Messages: 75
    • Voir le profil
    • E-mail
Problème de points avec convexShape
« le: Janvier 04, 2014, 01:58:28 pm »
Bonjour tout le monde,
Je rencontre un problème avec ConvexShape, mais je suis quasiment certain que c'est de ma faute..
J'essaye de faire un rectangle arrondi mais le résulat ne suit pas  :-[ j'ai qulques points qui se trouvent a des endroits improbables( voir la piece jointe ) j'ai entouré, pour un coin, deux points qui ne sont meme pas listé dans ma shape et tracé en vert la forme qu'elle devrait normalement avoir.
Evidemment vous ne pourrez pas m’aider sans code:
C'est long, mais la moitié c'est du "debug"  ;)
RoundRect::RoundRect(const sf::Vector2f& position, const sf::Vector2f& dimensions,const float& borderRadius,  const int unsigned& pointCount)
{
        unsigned int i;
        m_shape.setPointCount(pointCount*4); // m_shape est un sf::conexshape
        for(i=0;i<pointCount;++i) //ANGLE 1
        {
                m_shape.setPoint(i, sf::Vector2f(position.x - borderRadius*std::sinf((i*PI)/((pointCount-1)*2)),position.y - borderRadius*std::cosf((i*PI)/((pointCount-1)*2))));
                std::cout << "PosX du point " << i << ": " << m_shape.getPoint(i).x << std::endl;
                std::cout << "PosY du point " << i << ": " << m_shape.getPoint(i).y << std::endl;
        }
        for(i=pointCount; i<pointCount*2; i++)
        {
                m_shape.setPoint(i, sf::Vector2f(position.x + dimensions.x + borderRadius - borderRadius*std::cosf((i*PI)/((pointCount-1)*2)),position.y - borderRadius*std::sinf((i*PI)/((pointCount-1)*2))));
                std::cout << "PosX du point " << i << ": " << m_shape.getPoint(i).x << std::endl;
                std::cout << "PosY du point " << i << ": " << m_shape.getPoint(i).y << std::endl;
        }
        for(i=pointCount*2; i<pointCount*3; i++)
        {
                m_shape.setPoint(i, sf::Vector2f(position.x + dimensions.x - borderRadius*std::sinf((i*PI)/((pointCount-1)*2)),position.y + dimensions.y - borderRadius + borderRadius*std::sinf((i*PI)/((pointCount-1)*2))));
                std::cout << "PosX du point " << i << ": " << m_shape.getPoint(i).x << std::endl;
                std::cout << "PosY du point " << i << ": " << m_shape.getPoint(i).y << std::endl;
        }
        for(i=pointCount*3; i<pointCount*4; i++)
        {
                m_shape.setPoint(i, sf::Vector2f(position.x + borderRadius - borderRadius*std::sinf((i*PI)/((pointCount-1)*2)), position.y + dimensions.y - borderRadius*std::sinf((i*PI)/((pointCount-1)*2))));
                std::cout << "PosX du point " << i << ": " << m_shape.getPoint(i).x << std::endl;
                std::cout << "PosY du point " << i << ": " << m_shape.getPoint(i).y << std::endl;
        }
        update();
}
 
Est-ce que quelqu'un sait d'où ca vient  :o
Merci
« Modifié: Janvier 05, 2014, 10:44:16 am par yhu420 »

Nexus

  • SFML Team
  • Hero Member
  • *****
  • Messages: 6287
  • Thor Developer
    • Voir le profil
    • Bromeon
Re : Problème de points avec conexShape
« Réponse #1 le: Janvier 04, 2014, 02:35:17 pm »
J'ai implementé cela dans Thor, peut-être la fonction roundedRect() peut t'aider? :)
Zloxx II: action platformer
Thor Library: particle systems, animations, dot products, ...
SFML Game Development:

yhu420

  • Jr. Member
  • **
  • Messages: 75
    • Voir le profil
    • E-mail
Re : Problème de points avec conexShape
« Réponse #2 le: Janvier 04, 2014, 04:44:22 pm »
J'ai implementé cela dans Thor, peut-être la fonction roundedRect() peut t'aider? :)
Ouais ca pourrait m'aider, mais le truc c'est que je suis pas super fort en programmation et tout et si j'espere faire un programme complet un jour je préfererai tout faire moi meme et pouvoir dire "c'est moi qui l'ai fait" plutot que "j'ai tout trouvé sur internet" et aussi (surtout) j'ai pas la foi d'installer des tonnes de librairies..
Merci tout de meme pour la suggestion  :D

Nexus

  • SFML Team
  • Hero Member
  • *****
  • Messages: 6287
  • Thor Developer
    • Voir le profil
    • Bromeon
Re : Problème de points avec conexShape
« Réponse #3 le: Janvier 04, 2014, 04:54:59 pm »
Tu ne peux jamais dire que c'est toi qui a tout fait, car tu utilises beaucoup de téchnologie existante (SFML, C++, ...) ;)

Thor est open-source, alors tu peux regarder son code et le comparer avec le tien. Il ne faut pas installer la bibliothèque pour ça.
Zloxx II: action platformer
Thor Library: particle systems, animations, dot products, ...
SFML Game Development:

yhu420

  • Jr. Member
  • **
  • Messages: 75
    • Voir le profil
    • E-mail
Re : Problème de points avec convexShape
« Réponse #4 le: Janvier 05, 2014, 12:27:26 pm »
Trop tard j'ai trouvé  ;D si quelqu'un est interressé par une classe RoundRect, ajoutez vous meme les couleurs!
RoundRect::RoundRect(const sf::Vector2f& position, const sf::Vector2f& dimensions,const float& borderRadius,  const int unsigned& pointCount)
{
        unsigned int i;
        m_shape.setPointCount(pointCount*4);
        for(i=0;i<pointCount;++i) //ANGLE 1
        {
                m_shape.setPoint(i, sf::Vector2f(position.x +borderRadius - borderRadius*std::cosf((i*PI)/((pointCount-1)*2)),position.y +borderRadius - borderRadius*std::sinf((i*PI)/((pointCount-1)*2))));
                //std::cout << "PosX of point " << i << ": " << m_shape.getPoint(i).x << std::endl;
                //std::cout << "PosY of point " << i << ": " << m_shape.getPoint(i).y << std::endl;
        }
        for(i=0;i<pointCount;++i)
        {
                m_shape.setPoint(i+pointCount, sf::Vector2f(position.x -borderRadius+ dimensions.x + borderRadius*std::sinf((i*PI)/((pointCount-1)*2)),position.y +borderRadius- borderRadius*std::cosf((i*PI)/((pointCount-1)*2))));
                //std::cout << "PosX of point " << i+pointCount << ": " << m_shape.getPoint(i+pointCount).x << std::endl;
                //std::cout << "PosY of point " << i+pointCount << ": " << m_shape.getPoint(i+pointCount).y << std::endl;
        }
        for(i=0;i<pointCount;++i)
        {//was with sin sin
                m_shape.setPoint(i+pointCount*2, sf::Vector2f(position.x + dimensions.x -borderRadius+ borderRadius*std::cosf((i*PI)/((pointCount-1)*2)),position.y + dimensions.y - borderRadius + borderRadius*std::sinf((i*PI)/((pointCount-1)*2))));//Both cos used to be sin
                //std::cout << "PosX of point " << i+pointCount*2 << ": " << m_shape.getPoint(i+pointCount*2).x << std::endl;
                //std::cout << "PosY of point " << i+pointCount*2 << ": " << m_shape.getPoint(i+pointCount*2).y << std::endl;
        }
        for(i=0;i<pointCount;++i)
        {
                m_shape.setPoint(i+pointCount*3, sf::Vector2f(position.x + borderRadius - borderRadius*std::sinf((i*PI)/((pointCount-1)*2)), position.y -borderRadius+ dimensions.y + borderRadius*std::cosf((i*PI)/((pointCount-1)*2))));
                //std::cout << "PosX of point " << i+pointCount*3 << ": " << m_shape.getPoint(i+pointCount*3).x << std::endl;
                //std::cout << "PosY of point " << i+pointCount*3 << ": " << m_shape.getPoint(i+pointCount*3).y << std::endl;
        }
        update();
}