A voir également:
- Simulation info biologique / js
- Info pc - Guide
- Crystaldisk info - Télécharger - Informations & Diagnostic
- Simulation place accor hotel arena ✓ - Forum Loisirs / Divertissements
- Wifi info view - Télécharger - Divers Réseau & Wi-Fi
- Darkino info - Accueil - Services en ligne
4 réponses
Bonjour,
je ne suis pas sûr de comprendre votre problème ni l'énoncé.
Pour vous aider je vais tenter de les rapporter à la représentation sur le repère cartésien, ce qui peut-être erroné depuis le point de vue du modèle initial:
Ce que vous voulez faire et pose problème est que vous avez un rectangle qui doit afficher sur chacun de ses côtés un autre élément.
La question (que vous semblez posé et j'espère avoir bien compris) c'est comment dans le repère en 2 dimensions repérer chaque côté pour qu'il n'y ait qu'un seul élément pour chaque côté du polygone.
Votre solution est d'ajouter 40? Là j'ai du mal à suivre, 40 de quelle unité?
Pour répondre à la formulation que j'ai exprimée il faut repérer les droites qui composent les 4 côtés du rectangle et attribuer à chacune les positions x et y correspondantes.
Hors pour repérer 4 'faces' d'un rectangle le moyen mathématique est assez évident:
Ce sont les coordonnées exprimées et utilisées dans la modélisation du polygone telle:
x et y le plus petit en position dans le repère cartésien.
les vecteurs exprimés par longueur et hauteur déterminent tout les autres points donc les 4 'lignes' des côtés selon les droites exprimées par 2 points cartésiens:
côté base = (x , y) à (x+longueur, y)
côté gauche = (x,y) à (x,y+hauteur)
côté droit = (x+longueur , y) à (x+longueur, y +hauteur)
côté du dessus = (x, y +hauteur) à (x+longueur, y+hauteur)
Pour ajouter une forme adjacente dans notre repère cartésien à l'une des faces il faut donc que les dimensions de les positions de la forme à rajoutée ait un côté adjacent tenant compte des chevauchements éventuels ou de l'inclusion à l'intérieur:
Nous en venons à :
Pour chaque côté rajouter un élément exprimée par les 4 points de ses coordonnées(pour simplifier je leur attribue une forme rectangle aussi il faut donc d'autres calculs si la forme est différente ben entendu) tels:
'j'utiliserais ici comme point de référence le milieu des droites qui bien sûr doit être changé si on veut utiliser un côté ou l'autre ou une valeur aléatoire le long des droites de chaque côté.)
récepteur les 4 coordonnées ont une face en commun telle pour le côté base nommée (rx(n), ry(n)) n étant un numéro arbitraire des 4 coordoonnées du points du récepteur soit point 1 = (rx0, ry0) etc...
(rx0,ry0) à (rx1 , ry1) sont les coordonnées du côté adjacent
et s'expriment comme cela pour le côté base dont on a obtenu les coords. plus haut:
abscisse du premier point
rx0 = x - longueur/2 - (longueur_du_récepteur/2)
x-longueur/2 étant le milieu et notre point de référence.
longueur_du_récepteur/2 est la moitié de la longueur du récepteur.
ordonnée du premier point
ry0 = y-hauteur/2 - hauteur_du_récepteur/2
A partir d'un seul point et connaissant les dimensions il est aisé de déduire les autres coordonnées.
Utiliser + ou - pour les autres côtés selon que la forme doit être inscrite ou 'externe' aux 4 côtés du rectangle auquel ajouter ceux des récepteurs.
J'espère que ça peut correspondre et vous aider. Pour vous aider à définir l'algorithme nécessairevous pouvez dessiner les rectangles sur une feuille de papier mais pour l'essentiel ce ne sont que des déductions tenant compte ou non des collisions des objets dans le repère(le chevauchement ou non) qui vont servir de limite et de fixer des points de références correspondant à des lignes qui se chevauchent et exprimant leur liaison avec chaque côté du rectangle qui doit avoir d'autres objets adjacents.
Enfin c'est plus facile à comprendre que d'en parler je pense ;)
je ne suis pas sûr de comprendre votre problème ni l'énoncé.
Pour vous aider je vais tenter de les rapporter à la représentation sur le repère cartésien, ce qui peut-être erroné depuis le point de vue du modèle initial:
Ce que vous voulez faire et pose problème est que vous avez un rectangle qui doit afficher sur chacun de ses côtés un autre élément.
La question (que vous semblez posé et j'espère avoir bien compris) c'est comment dans le repère en 2 dimensions repérer chaque côté pour qu'il n'y ait qu'un seul élément pour chaque côté du polygone.
Votre solution est d'ajouter 40? Là j'ai du mal à suivre, 40 de quelle unité?
Pour répondre à la formulation que j'ai exprimée il faut repérer les droites qui composent les 4 côtés du rectangle et attribuer à chacune les positions x et y correspondantes.
Hors pour repérer 4 'faces' d'un rectangle le moyen mathématique est assez évident:
Ce sont les coordonnées exprimées et utilisées dans la modélisation du polygone telle:
x et y le plus petit en position dans le repère cartésien.
les vecteurs exprimés par longueur et hauteur déterminent tout les autres points donc les 4 'lignes' des côtés selon les droites exprimées par 2 points cartésiens:
côté base = (x , y) à (x+longueur, y)
côté gauche = (x,y) à (x,y+hauteur)
côté droit = (x+longueur , y) à (x+longueur, y +hauteur)
côté du dessus = (x, y +hauteur) à (x+longueur, y+hauteur)
Pour ajouter une forme adjacente dans notre repère cartésien à l'une des faces il faut donc que les dimensions de les positions de la forme à rajoutée ait un côté adjacent tenant compte des chevauchements éventuels ou de l'inclusion à l'intérieur:
Nous en venons à :
Pour chaque côté rajouter un élément exprimée par les 4 points de ses coordonnées(pour simplifier je leur attribue une forme rectangle aussi il faut donc d'autres calculs si la forme est différente ben entendu) tels:
'j'utiliserais ici comme point de référence le milieu des droites qui bien sûr doit être changé si on veut utiliser un côté ou l'autre ou une valeur aléatoire le long des droites de chaque côté.)
récepteur les 4 coordonnées ont une face en commun telle pour le côté base nommée (rx(n), ry(n)) n étant un numéro arbitraire des 4 coordoonnées du points du récepteur soit point 1 = (rx0, ry0) etc...
(rx0,ry0) à (rx1 , ry1) sont les coordonnées du côté adjacent
et s'expriment comme cela pour le côté base dont on a obtenu les coords. plus haut:
abscisse du premier point
rx0 = x - longueur/2 - (longueur_du_récepteur/2)
x-longueur/2 étant le milieu et notre point de référence.
longueur_du_récepteur/2 est la moitié de la longueur du récepteur.
ordonnée du premier point
ry0 = y-hauteur/2 - hauteur_du_récepteur/2
A partir d'un seul point et connaissant les dimensions il est aisé de déduire les autres coordonnées.
Utiliser + ou - pour les autres côtés selon que la forme doit être inscrite ou 'externe' aux 4 côtés du rectangle auquel ajouter ceux des récepteurs.
J'espère que ça peut correspondre et vous aider. Pour vous aider à définir l'algorithme nécessairevous pouvez dessiner les rectangles sur une feuille de papier mais pour l'essentiel ce ne sont que des déductions tenant compte ou non des collisions des objets dans le repère(le chevauchement ou non) qui vont servir de limite et de fixer des points de références correspondant à des lignes qui se chevauchent et exprimant leur liaison avec chaque côté du rectangle qui doit avoir d'autres objets adjacents.
Enfin c'est plus facile à comprendre que d'en parler je pense ;)
Merci pour votre réponse !! Il est vrai que je n'ai pas été très clair, j'ai bel et bien réussi a placer mes récepteurs, il peut en fait en avoir plusieurs sur un même coté (je génère aléatoirement entre 12 et 18 récepteur en tout). Mon problème est que comme il s'agit d'un placement aléatoire, certains récepteurs se chevauchent..
Voici un schéma qui j'espère vous éclairera, qui représente un coté de la membrane, avec ses récepteurs :
-----| | |--------| |------ ici les 2 premiers récepteurs se chevauchent
--------| |--------| |-----------| |-------- et voici mon modèle "idéal"
En espérant me faire comprendre
Je vous remercie pour l'aide apportée
Voici un schéma qui j'espère vous éclairera, qui représente un coté de la membrane, avec ses récepteurs :
-----| | |--------| |------ ici les 2 premiers récepteurs se chevauchent
--------| |--------| |-----------| |-------- et voici mon modèle "idéal"
En espérant me faire comprendre
Je vous remercie pour l'aide apportée
Ah je voulais en parler du chevauchement mais n'avais pas tout compris de la question.
Pour éviter le chevauchement il faut que chaque ajout teste si il y a chevauchement (ça s'appelle un texte de collision):
Donc à chaque ajout(sauf le premier) il faut une boucle qui compare la nouvelle position et les distances longueur/largeurs avec celles existantes.
=> Si pas de collision d'éléments on fait l'ajout et passe au suivant
=> sinon on recommence à attribuer une valeur aléatoire et nouveau test, bien sûr ce sera plus rapide si il y a moins
de risque de collision(donc un espace assez large par rapport aux dimensions de l'élément à ajouter).
Il serais même plus logique d'avant d'ajouter de générer toutes les positions en tenant compte de ça (la collision)plutôt que d'attendre de le faire au moment d'afficher.
Je fais un exemple simplifié du test de collision et je publie ça.
Pour éviter le chevauchement il faut que chaque ajout teste si il y a chevauchement (ça s'appelle un texte de collision):
Donc à chaque ajout(sauf le premier) il faut une boucle qui compare la nouvelle position et les distances longueur/largeurs avec celles existantes.
=> Si pas de collision d'éléments on fait l'ajout et passe au suivant
=> sinon on recommence à attribuer une valeur aléatoire et nouveau test, bien sûr ce sera plus rapide si il y a moins
de risque de collision(donc un espace assez large par rapport aux dimensions de l'élément à ajouter).
Il serais même plus logique d'avant d'ajouter de générer toutes les positions en tenant compte de ça (la collision)plutôt que d'attendre de le faire au moment d'afficher.
Je fais un exemple simplifié du test de collision et je publie ça.
Oui, la collision me paraissait bien a premier abord (c'est ce principe que j'ai utilisé pour la collision entre mes neurotransmetteur et mes récépteurs), mais avec ma boucle while et la création de mes 4 objets, c'est devenu tout de suite beaucoup compliqué je trouvais
Je vous remercie énormement !!!
Je vous remercie énormement !!!
pas trouvé hélas. désolé pour l'aide incomplète.
J'ai fait ceci qui peut vous aider (le test de collision est bon pour une valeur X/abscisse comprise entre les paramètres ) mais comme c'est encore incomplet il faudra trouver l'astuce pour la bonne récursivité,
bonne chance:
J'ai fait ceci qui peut vous aider (le test de collision est bon pour une valeur X/abscisse comprise entre les paramètres ) mais comme c'est encore incomplet il faudra trouver l'astuce pour la bonne récursivité,
bonne chance:
<html> <script> let espaceTotal=100,/* pour simplifier l'exemple se fait sur une droite horizontale qui ne tient pas compte de la hauteur*/ longueur=10, liste=[]; let aleatoire=function(max){ return Math.floor(Math.random()*max);//---entier entre 0 et max-1 ici ce sera 0 et 99 } //-- d'abord créer un premier élément dans la liste liste.push( aleatoire(espaceTotal) ) ; //-- toujours pour simplifier l'exemple je ne teste que l'écart horizontal let generateur=function(nombre){ for(let i=0;i<nombre;i++){//-- première boucle qui crée le nombre d'éléments désirés for(let j=0;j<liste.length;j++){//-- la boucle qui teste si un élément chevauche l'autre let aleaX=aleatoire(espaceTotal); let controle=true; if( aleaX > liste[j] && aleaX > liste[j]+longueur ){ console.log('ok on peut rajouter '); controle==false; } if (controle!=false && aleaX< liste[j] && aleaX[j]+longueur <liste[j]){ controle=false; } if(controle===false){ liste.push(aleaX ) ; }else{ } } } } generateur(12); console.log('liste '+liste); </script> </html>