FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Petit test pour Papydall Emptypar Pedro Aujourd'hui à 8:08

» Un autre pense-bête...
Petit test pour Papydall Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Petit test pour Papydall Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Petit test pour Papydall Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Petit test pour Papydall Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Petit test pour Papydall Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Petit test pour Papydall Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Petit test pour Papydall Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Petit test pour Papydall Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Petit test pour Papydall Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Petit test pour Papydall Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Petit test pour Papydall Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Petit test pour Papydall Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Petit test pour Papydall Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Petit test pour Papydall Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le deal à ne pas rater :
Code promo Nike : -25% dès 50€ d’achats sur tout le site Nike
Voir le deal

 

 Petit test pour Papydall

Aller en bas 
+5
Jean Claude
Yannick
Klaus
papydall
Jicehel
9 participants
AuteurMessage
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Petit test pour Papydall Empty
MessageSujet: Petit test pour Papydall   Petit test pour Papydall EmptyVen 21 Aoû 2015 - 9: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
papydall

papydall


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

Petit test pour Papydall Empty
MessageSujet: Re: Petit test pour Papydall   Petit test pour Papydall EmptyVen 21 Aoû 2015 - 10: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.Petit test pour Papydall 0110

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
http://papydall-panoramic.forumarabia.com/
Klaus

Klaus


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

Petit test pour Papydall Empty
MessageSujet: Re: Petit test pour Papydall   Petit test pour Papydall EmptyVen 21 Aoû 2015 - 11: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
http://klauspanoramic.comxa.com/index.html
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Petit test pour Papydall Empty
MessageSujet: re   Petit test pour Papydall EmptyVen 21 Aoû 2015 - 11: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
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Petit test pour Papydall Empty
MessageSujet: Re: Petit test pour Papydall   Petit test pour Papydall EmptyVen 21 Aoû 2015 - 16: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
Jean Claude

Jean Claude


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

Petit test pour Papydall Empty
MessageSujet: Re: Petit test pour Papydall   Petit test pour Papydall EmptyVen 21 Aoû 2015 - 16:57

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

A+
Revenir en haut Aller en bas
Minibug

Minibug


Nombre de messages : 4570
Age : 58
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Petit test pour Papydall Empty
MessageSujet: Re: Petit test pour Papydall   Petit test pour Papydall EmptyVen 21 Aoû 2015 - 17:10

Bon rétablissement a ton épouse Papydall. sunny
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
JL35




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

Petit test pour Papydall Empty
MessageSujet: Re: Petit test pour Papydall   Petit test pour Papydall EmptyVen 21 Aoû 2015 - 17: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
Invité
Invité




Petit test pour Papydall Empty
MessageSujet: Re: Petit test pour Papydall   Petit test pour Papydall EmptyVen 21 Aoû 2015 - 22:45

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

The Gamer


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

Petit test pour Papydall Empty
MessageSujet: Re: Petit test pour Papydall   Petit test pour Papydall EmptySam 22 Aoû 2015 - 0:02

Je souhaite un bon rétablissement à ta compagne Papydall Wink
Revenir en haut Aller en bas
http://pierrehardy.pagesperso-orange.fr/
papydall

papydall


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

Petit test pour Papydall Empty
MessageSujet: Re: Petit test pour Papydall   Petit test pour Papydall EmptySam 22 Aoû 2015 - 10: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
http://papydall-panoramic.forumarabia.com/
Klaus

Klaus


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

Petit test pour Papydall Empty
MessageSujet: Re: Petit test pour Papydall   Petit test pour Papydall EmptySam 22 Aoû 2015 - 11:27

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

papydall


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

Petit test pour Papydall Empty
MessageSujet: Re: Petit test pour Papydall   Petit test pour Papydall EmptySam 22 Aoû 2015 - 11:57

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




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Petit test pour Papydall Empty
MessageSujet: re   Petit test pour Papydall EmptySam 22 Aoû 2015 - 18: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
papydall

papydall


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

Petit test pour Papydall Empty
MessageSujet: Re: Petit test pour Papydall   Petit test pour Papydall EmptySam 22 Aoû 2015 - 18:55

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

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Petit test pour Papydall Empty
MessageSujet: Re: Petit test pour Papydall   Petit test pour Papydall EmptySam 22 Aoû 2015 - 21: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
silverman

silverman


Nombre de messages : 970
Age : 52
Localisation : Picardie
Date d'inscription : 18/03/2015

Petit test pour Papydall Empty
MessageSujet: Re: Petit test pour Papydall   Petit test pour Papydall EmptyLun 24 Aoû 2015 - 11: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
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Petit test pour Papydall Empty
MessageSujet: Re: Petit test pour Papydall   Petit test pour Papydall EmptyLun 24 Aoû 2015 - 11: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
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Petit test pour Papydall Empty
MessageSujet: Re: Petit test pour Papydall   Petit test pour Papydall EmptyMar 1 Sep 2015 - 12: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
silverman

silverman


Nombre de messages : 970
Age : 52
Localisation : Picardie
Date d'inscription : 18/03/2015

Petit test pour Papydall Empty
MessageSujet: Re: Petit test pour Papydall   Petit test pour Papydall EmptyMer 2 Sep 2015 - 11: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
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

Petit test pour Papydall Empty
MessageSujet: Re: Petit test pour Papydall   Petit test pour Papydall EmptyMer 2 Sep 2015 - 21: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
Minibug

Minibug


Nombre de messages : 4570
Age : 58
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Petit test pour Papydall Empty
MessageSujet: Re: Petit test pour Papydall   Petit test pour Papydall EmptyMer 2 Sep 2015 - 22: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
http://gpp.panoramic.free.fr
Contenu sponsorisé





Petit test pour Papydall Empty
MessageSujet: Re: Petit test pour Papydall   Petit test pour Papydall Empty

Revenir en haut Aller en bas
 
Petit test pour Papydall
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Un petit essai pour m'aider...
» Pour papydall
» Panoramic_Editor: Rechercher/Remplacer
» Pour PAPYDALL
» un petit encouragement pour panoramic

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: