Salut à vous les gars ! Désolé de ne pas m'être manifesté plus tôt..!
Je vous remercie énormément pour vos contributions, je vais de ce pas étudier ça DE SUITE ! :-]
EDIT :
Alors voilà, pour simplifier le tout afin d'apprendre bien doucement, j'ai remplacé le carré par un autre segment, le but étant de trouver le point d'intersection entre le segment que je déplace moi-même avec la souris et le clavier et le second qui est placé par défaut pour le test.
J'ai tenté d'appliquer ton algo mais manifestement ça ne semble pas fonctionner correctement... l'intersection est détectée uniquement lorsque je suis dans une position précise :
Dans ces deux cas de figure, il ne se passe rien... ( voir consoles )
Ou encore
Mais quand je me place là, j'ai quelque chose ( voir console )
Voici mon code :
#include <iostream>
#include <math.h>
#include <SFML/Graphics.hpp>
const float PI = 3.14;
bool intersects(sf::Vector2f L1P1, sf::Vector2f L1P2, sf::Vector2f L2P1, sf::Vector2f L2P2,
sf::Vector2f &coords);
int main()
{
sf::RenderWindow renderWindow(sf::VideoMode(800,600,32),"Raycasting Attempt", sf::Style::Titlebar);
renderWindow.setFramerateLimit(60);
sf::Vector2f m_coords = sf::Vector2f(0,0);
///COORDONNEES DU TRIANGLE///
float pic = 15;
///VITESSE DE DEPLACEMENT///
float speed = 3;
///POSITION DU TRIANGLE ET SON DIFFERENTIEL
sf::Vector2f tPos;
sf::Vector2i diff;
sf::ConvexShape triangle(3);
triangle.setPoint(0, sf::Vector2f(pic,NULL));
triangle.setPoint(1, sf::Vector2f(pic*2,pic*2));
triangle.setPoint(2, sf::Vector2f(NULL,pic*2));
triangle.setOrigin(sf::Vector2f(pic, pic));
///LA LIGNE DE PROJECTION///
sf::Vertex lineProjLeft[] =
{
sf::Vertex(sf::Vector2f(0,0)),
sf::Vertex(sf::Vector2f(150,150))
};
///LA LIGNE DE TEST///
sf::Vertex lineTest[] =
{
sf::Vertex(sf::Vector2f(100,180)),
sf::Vertex(sf::Vector2f(220,120))
};
while (renderWindow.isOpen())
{
sf::Event event;
while (renderWindow.pollEvent(event))
{
switch(event.type)
{
case sf::Event::Closed:
renderWindow.close();
break;
case sf::Event::KeyReleased:
if (event.key.code == sf::Keyboard::Escape)
renderWindow.close();
break;
}
}
///DEPLACEMENT FLECHES///
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
tPos.y-=speed;
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
tPos.y+=speed;
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
tPos.x-=speed;
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
tPos.x+=speed;
lineProjLeft[0].position.x = tPos.x;
lineProjLeft[0].position.y = tPos.y;
triangle.setPosition(tPos);
///CALCUL DU DIFFERENTIEL POUR L'ANGLE///
diff.x = sf::Mouse::getPosition(renderWindow).x - tPos.x;
diff.y = sf::Mouse::getPosition(renderWindow).y - tPos.y;
float angle = (atan2(diff.x, diff.y)) * 180 / PI;
triangle.setRotation(-(angle+180));
lineProjLeft[1].position.x = sf::Mouse::getPosition(renderWindow).x;
lineProjLeft[1].position.y = sf::Mouse::getPosition(renderWindow).y;
if (intersects(lineProjLeft[0].position, lineProjLeft[1].position,
lineTest[0].position, lineTest[1].position, m_coords))
{
std::cout << " x : " << m_coords.x << std::endl;
std::cout << " y : " << m_coords.y << std::endl;
}
renderWindow.clear();
renderWindow.draw(triangle);
renderWindow.draw(lineProjLeft, 2, sf::Lines);
renderWindow.draw(lineTest, 2, sf::Lines);
renderWindow.display();
}
}
bool intersects(sf::Vector2f L1P1, sf::Vector2f L1P2, sf::Vector2f L2P1, sf::Vector2f L2P2,
sf::Vector2f &coords)
{
float P1 = (L1P2.x - L1P1.x) / (L1P2.y - L1P1.y);
float PP1 = L1P1.y - (P1*L1P1.x);
float P2 = (L2P2.x - L2P1.x) / (L2P2.y - L2P1.y);
float PP2 = L2P1.y - (P1*L2P1.x);
if (P1 == P2)
return false;
float x = (PP2 - PP1) / (P1 - P2);
if (x<L1P1.x || x>L1P2.x)
return false;
if (x<L2P1.x || x>L2P2.x)
return false;
coords.x = x;
coords.y = (P1 * x) + PP1;
return true;
}
Merci encore de bien vouloir m'aider :-)