FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Texte en gif animé
par Jicehel Aujourd'hui à 16:01

» BasicEditor
par Yannick Hier à 17:17

» Simuler l’appui d'une touche ou combinaison de touches.
par pascal10000 Lun 18 Sep 2017 - 19:30

» Utilisation de HVIEWER pour afficher des images
par papydall Lun 18 Sep 2017 - 17:43

» Panoramic et les gifs animés.
par papydall Lun 18 Sep 2017 - 16:32

» recover source
par pascal10000 Dim 17 Sep 2017 - 14:21

» Recent dans vos menu
par Jean Claude Sam 16 Sep 2017 - 11:41

» Comment centrer un texte 3D.
par pascal10000 Ven 15 Sep 2017 - 20:20

» Carte interface 16 entrées et 16 sorties
par Jicehel Ven 15 Sep 2017 - 16:30

» Version instantanée V 0.9.28i9 possédant l'objet SYNEDIT
par pascal10000 Ven 15 Sep 2017 - 16:20

» Compilateur FBPano
par jean_debord Ven 15 Sep 2017 - 9:59

» 1 (en analyse): 3D_TARGET_IS ne fonctionne pas sur 3D_TEXT
par Jack Jeu 14 Sep 2017 - 19:52

» Problème avec la 3D.
par Jack Jeu 14 Sep 2017 - 18:06

» Test de la 3D.
par mindstorm Mer 13 Sep 2017 - 19:45

» Logiciel de soutien scolaire en langues.
par Pedro Alvarez Mar 12 Sep 2017 - 21:42

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Septembre 2017
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier

Partagez | 
 

 Petit test pour Papydall

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Jicehel

avatar

Nombre de messages : 5854
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Petit test pour Papydall   Ven 21 Aoû 2015 - 10:27

Bon pour que notre Papydall s'ennuie, je propose un petit jeu qui lui ait particulièrement destiné mais bien sûr tout le monde peut jouer.

Le défit consiste à faire le programme permettant de détecter s'il y a collision entre 2 polygones en utilisant les 4 étapes ci dessous.

1. On récupère tous les axes séparateurs possibles pour les deux polygones. Pour les polygones, les axes sont les normales à chaque face des polygones. Il y a donc autant d'axes que de faces et il est super facile de calculer une normale a une face (géométrie euclidienne!)

2. On projette les points des deux polygones sur chaque axes (un produit scalaire suffit...) et on prend pour les deux polygones, les points extrêmes des projections sur l'axe.

3. Si le segment des points extrêmes du 1er polygone chevauche le segment du 2eme polygone, on dit que l'axe n'est pas séparateur (il est séparateur si les deux segments sont disjoints)

4. On dit que le polygone ne touche pas l'autre polygone s'il existe un axe pour lequel l'axe est séparateur. Si tous les axes ne sont pas séparateurs, les polygones se touchent!

C'est un défit de vacances qui ne se veut pas trop complexe mais suffisamment intéressant pour remplacer les mots fléchés de notre Papydall qu'il remplit certainement dans une chaise longue à l'ombre d'un grand arbre, un peu avan l'apéro ... lol!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5531
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Petit test pour Papydall   Ven 21 Aoû 2015 - 11:39

Bonjour Jicehel.
Bonjour tout le monde.

En ce moment je n’ai pas le cœur gai.
Ma femme est entrée à l’hôpital pour intervention chirurgicale et elle me manque terriblement.

Le problème que tu soulèves est certainement intéressant, mais suis-je assez compétant  pour le résoudre ?
Difficile de répondre sur le coup.
Je m’associe à toi pour inviter tous ceux qui veulent bien se pencher sur ce problème à proposer et échanger leurs idées et leurs trucs et astuces.

J’espère y participer …
A plus !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Petit test pour Papydall   Ven 21 Aoû 2015 - 12:23

@Papydall:
Je suis passé par là, et je sais ce que c'est. Je suis de tout coeur avec toi et je t'envoie mes sincères souhaits de bon rétablissement pour ton épouse. Courage...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7991
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Ven 21 Aoû 2015 - 12:52

@ Jicehel,

Je suis en pleine digestion de ISAM et je vais essayer d' avaler la combinaison avec BDR.
Donc, ce n' est pas tout de suite pour moi. Laughing 

@ Papydall,

Je suis de tout coeur avec toi et, comme Klaus, je te souhaite un bon rétablissement pour ton épouse.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5854
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Petit test pour Papydall   Ven 21 Aoû 2015 - 17:49

Mince désolé Papydall. Si j'avais su je ne t'aurais pas mis au défit. Mais comme tu te faisais un peu discret, j'ai voulu te titiller. Maintenant que je sais pourquoi, tu as certainement en effet mieux à faire. Tous mes vœux de bon rétablissement à ta femme et j'espère que tu retrouveras vite le morale avec son retour en pleine santé. S'il te plait dit lui le bonjour de la part de tous les Panoramiciens et fais toi le relais de nos vœux.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5015
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Petit test pour Papydall   Ven 21 Aoû 2015 - 17:57

Je m'associe à tous pour souhaiter un prompt rétablissement à Mme Papydall.

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Laurent (Minibug)

avatar

Nombre de messages : 2353
Age : 50
Localisation : Vienne (86)
Date d'inscription : 10/02/2012

MessageSujet: Re: Petit test pour Papydall   Ven 21 Aoû 2015 - 18:10

Bon rétablissement a ton épouse Papydall. sunny
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 5946
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Petit test pour Papydall   Ven 21 Aoû 2015 - 18:31

Ça va sans dire, mais ça va mieux en le disant: pareil papydall, et bon courage à toi. Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Invité
Invité



MessageSujet: Re: Petit test pour Papydall   Ven 21 Aoû 2015 - 23:45

Je m'associe aux autres Panoramiciens pour souhaiter un retour heureux de ta femme.
Revenir en haut Aller en bas
The Gamer

avatar

Nombre de messages : 110
Age : 23
Localisation : Toulouse (31)
Date d'inscription : 11/05/2010

MessageSujet: Re: Petit test pour Papydall   Sam 22 Aoû 2015 - 1:02

Je souhaite un bon rétablissement à ta compagne Papydall Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://pierrehardy.pagesperso-orange.fr/
papydall

avatar

Nombre de messages : 5531
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Petit test pour Papydall   Sam 22 Aoû 2015 - 11:58

Bonjour tout le monde.
Merci à vous tous.
Vos petits mots me font beaucoup de plaisir.
Ma femme a quitté l’hôpital. Elle va plutôt mieux.
Elle aura encore pour quelques jours et j’espère être plus actif sur le forum dans peu de temps.
C'est toujours un plaisir pour moi à vous lire.
A +
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Klaus

avatar

Nombre de messages : 10062
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Petit test pour Papydall   Sam 22 Aoû 2015 - 12:27

Quel soulagement ! Prends bien soin de ta femme !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
papydall

avatar

Nombre de messages : 5531
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Petit test pour Papydall   Sam 22 Aoû 2015 - 12:57

Merci Klaus, je n'y manquerai pas.
Tu es très gentil.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Yannick

avatar

Nombre de messages : 7991
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Sam 22 Aoû 2015 - 19:41

@ Papydall,
Content que les nouvelles soient bonnes,
Prends bien soin de madame Papydall...
Avec tous mes vœux de rétablissement.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5531
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Petit test pour Papydall   Sam 22 Aoû 2015 - 19:55

Merci Ygeronimi.
D’habitude, c’est elle  queen qui prend soin de moi king
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jicehel

avatar

Nombre de messages : 5854
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Petit test pour Papydall   Sam 22 Aoû 2015 - 22:45

De temps en temps il faut inverser les rôles. Si tu en prends bien soin en plus avec un peu de chance elle te le rendra largement Very Happy
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
silverman

avatar

Nombre de messages : 465
Age : 45
Localisation : Picardie
Date d'inscription : 19/03/2015

MessageSujet: Re: Petit test pour Papydall   Lun 24 Aoû 2015 - 12:25

@jicehel
je n'ai pas tout compris à ton défi; pourquoi ces 4 étapes? C'est pour de la 2D? C'est une méthode que tu as imaginé?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5854
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Petit test pour Papydall   Lun 24 Aoû 2015 - 12:35

C'est la méthode qui est utilisé dans un algorithme de détection de collisions de polygones quelconques.
Il existe peut être d'autres solutions. Tu ferais autrement toi ?
Comme Papydall est costaud en maths, ça me semblait être un bon défit pour lui mais sinon j'adapterais le programme à moins que tu ais envie de t'y intéresser ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5854
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Petit test pour Papydall   Mar 1 Sep 2015 - 13:31

Le code à convertir est celui ci:
Using the code
The PolygonCollision() function does all of the above, and returns a PolygonCollisionResult structure containing all the necessary information to handle the collision:
Hide Copy Code
// Structure that stores the results of the PolygonCollision function
public struct PolygonCollisionResult {
// Are the polygons going to intersect forward in time?
public bool WillIntersect;
// Are the polygons currently intersecting?
public bool Intersect;
// The translation to apply to the first polygon to push the polygons apart.
public Vector MinimumTranslationVector;
}
Two helper functions are used by the PolygonCollision function. The first one is used to project a polygon onto an axis:
Hide Copy Code
// Calculate the projection of a polygon on an axis
// and returns it as a [min, max] interval
public void ProjectPolygon(Vector axis, Polygon polygon,
ref float min, ref float max) {
// To project a point on an axis use the dot product
float dotProduct = axis.DotProduct(polygon.Points[0]);
min = dotProduct;
max = dotProduct;
for (int i = 0; i < polygon.Points.Count; i++) {
dotProduct = polygon.Points[i].DotProduct(axis);
if (d < min) {
min = dotProduct;
} else {
if (dotProduct> max) {
max = dotProduct;
}
}
}
}
The second one returns the signed distance between two given projections:
Hide Copy Code
// Calculate the distance between [minA, maxA] and [minB, maxB]
// The distance will be negative if the intervals overlap
public float IntervalDistance(float minA, float maxA, float minB, float maxB) {
if (minA < minB) {
return minB - maxA;
} else {
return minA - maxB;
}
}
Finally, here is the main function:
Hide Shrink Copy Code
// Check if polygon A is going to collide with polygon B.
// The last parameter is the *relative* velocity
// of the polygons (i.e. velocityA - velocityB)
public PolygonCollisionResult PolygonCollision(Polygon polygonA,
Polygon polygonB, Vector velocity) {
PolygonCollisionResult result = new PolygonCollisionResult();
result.Intersect = true;
result.WillIntersect = true;

int edgeCountA = polygonA.Edges.Count;
int edgeCountB = polygonB.Edges.Count;
float minIntervalDistance = float.PositiveInfinity;
Vector translationAxis = new Vector();
Vector edge;

// Loop through all the edges of both polygons
for (int edgeIndex = 0; edgeIndex < edgeCountA + edgeCountB; edgeIndex++) {
if (edgeIndex < edgeCountA) {
edge = polygonA.Edges[edgeIndex];
} else {
edge = polygonB.Edges[edgeIndex - edgeCountA];
}

// ===== 1. Find if the polygons are currently intersecting =====

// Find the axis perpendicular to the current edge
Vector axis = new Vector(-edge.Y, edge.X);
axis.Normalize();

// Find the projection of the polygon on the current axis
float minA = 0; float minB = 0; float maxA = 0; float maxB = 0;
ProjectPolygon(axis, polygonA, ref minA, ref maxA);
ProjectPolygon(axis, polygonB, ref minB, ref maxB);

// Check if the polygon projections are currentlty intersecting
if (IntervalDistance(minA, maxA, minB, maxB) > 0)\
result.Intersect = false;

// ===== 2. Now find if the polygons *will* intersect =====

// Project the velocity on the current axis
float velocityProjection = axis.DotProduct(velocity);

// Get the projection of polygon A during the movement
if (velocityProjection < 0) {
minA += velocityProjection;
} else {
maxA += velocityProjection;
}

// Do the same test as above for the new projection
float intervalDistance = IntervalDistance(minA, maxA, minB, maxB);
if (intervalDistance > 0) result.WillIntersect = false;

// If the polygons are not intersecting and won't intersect, exit the loop
if (!result.Intersect && !result.WillIntersect) break;

// Check if the current interval distance is the minimum one. If so store
// the interval distance and the current distance.
// This will be used to calculate the minimum translation vector
intervalDistance = Math.Abs(intervalDistance);
if (intervalDistance < minIntervalDistance) {
minIntervalDistance = intervalDistance;
translationAxis = axis;

Vector d = polygonA.Center - polygonB.Center;
if (d.DotProduct(translationAxis) < 0)
translationAxis = -translationAxis;
}
}

// The minimum translation vector
// can be used to push the polygons appart.
if (result.WillIntersect)
result.MinimumTranslationVector =
translationAxis * minIntervalDistance;

return result;
}
The function can be used this way:
Hide Copy Code
Vector polygonATranslation = new Vector();

PolygonCollisionResult r = PolygonCollision(polygonA, polygonB, velocity);

if (r.WillIntersect) {
// Move the polygon by its velocity, then move
// the polygons appart using the Minimum Translation Vector
polygonATranslation = velocity + r.MinimumTranslationVector;
} else {
// Just move the polygon by its velocity
polygonATranslation = velocity;
}

polygonA.Offset(polygonATranslation);

Revenir en haut Aller en bas
Voir le profil de l'utilisateur
silverman

avatar

Nombre de messages : 465
Age : 45
Localisation : Picardie
Date d'inscription : 19/03/2015

MessageSujet: Re: Petit test pour Papydall   Mer 2 Sep 2015 - 12:19

En quoi ça peux servir de savoir faire ça en panoramic, pour quel genre de programme? En 2D, panoramic sait détecter les collisions entre sprites, donc je vois pas...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5854
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Petit test pour Papydall   Mer 2 Sep 2015 - 22:19

Panoramic ne sait pas détecter la collision entre sprite. C'est à toi de le coder.
On peut facilement le faire pour des formes rectangulaire, ou sphérique (voir articles précédents)
Pour 2 polygones quelconques c'est le cas le plus difficile.

Imaginons que tu veuilles par exemple tester la collision entre 2 polygones complexes pour voir si 2 gros astéroides rentrent en collision.

Ca pourrait même servir pour savoir si des pièces de Tetris se touchent même si dans ce cas là, l'utilisation d'une matrice est plus simple.

En fait c'est le dernier cas des détections de collision de formes pour l'article
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Laurent (Minibug)

avatar

Nombre de messages : 2353
Age : 50
Localisation : Vienne (86)
Date d'inscription : 10/02/2012

MessageSujet: Re: Petit test pour Papydall   Mer 2 Sep 2015 - 23:22

A propos de Papydall, Quelqu'un a des nouvelles ?

Il n'est pas passé sur le forum depuis vendredi matin...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Petit test pour Papydall   

Revenir en haut Aller en bas
 
Petit test pour Papydall
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» petit probleme pour afficher un image sur mon forum...
» Petit soucis pour une map monde des inscrit
» Petit soucis pour le nom de mon " nouveau " Forum
» Un petit test pour Mickaël
» DNSChanger : passer le test pour éviter la coupure

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Présentation et bavardage-
Sauter vers: