Forum Liberty Basic France
• Index
Reprise du message précédent
Re bonjour!
Je me suis plongé dans le problème que je pige maintenant parfaitement. Je comprend maintenant votre histoire de conversion polaire/cartésien. Je pense que c'est relativement facile à réaliser...je vais plancher la dessus au cours de la semaine si ma copine me laisse du répit.
J'aurais une question histoire de m'éclaircir les idées... Bon j'ai compris la base de données (matrice à 2 dimensions x et y). La profondeur est donnée pour une adresse en X de 0 à 100 et en Y de 0 à 50. L'origine (0,0) est donc en haut à gauche sur le graphique (la carte).
Maintenant pour le référentiel de direction (azimut), je voudrais savoir si vous avez choisi votre 0 degrés en haut comme je l'ai noté sur ma map ou autrement???
Tant qu'à travailler, aussi bien que j'aille dans la bonne direction.
Pour ce qui est du radar, est-ce que je travaille avec un rayon de 8Km autour du soum comme je l'ai lû quelque part?
Si c'est le cas, il faudrait séparer le balayage de 360 degrés du radar en 50 steps de 7,162 degrés chacun de façon ce que chaque pas couvre un arc de 1 km (qui est notre résolution) à la limite de la portée du radar. À chaque pas il faudra comparer le niveau des 8 cellules (portée de 8 km) constituant la pointe de tarte avec la profondeur du sous marin et afficher le résultat sur l'écran radar. Donc un total de 400 calculs par balayage.... Un beau problème, mais pas insurmontable.
Je met mes neurones là dessus et je vous reviens plus tard..
Re bonjour!
Je me suis plongé dans le problème que je pige maintenant parfaitement. Je comprend maintenant votre histoire de conversion polaire/cartésien. Je pense que c'est relativement facile à réaliser...je vais plancher la dessus au cours de la semaine si ma copine me laisse du répit.
J'aurais une question histoire de m'éclaircir les idées... Bon j'ai compris la base de données (matrice à 2 dimensions x et y). La profondeur est donnée pour une adresse en X de 0 à 100 et en Y de 0 à 50. L'origine (0,0) est donc en haut à gauche sur le graphique (la carte).
Maintenant pour le référentiel de direction (azimut), je voudrais savoir si vous avez choisi votre 0 degrés en haut comme je l'ai noté sur ma map ou autrement???

Tant qu'à travailler, aussi bien que j'aille dans la bonne direction.
Pour ce qui est du radar, est-ce que je travaille avec un rayon de 8Km autour du soum comme je l'ai lû quelque part?
Si c'est le cas, il faudrait séparer le balayage de 360 degrés du radar en 50 steps de 7,162 degrés chacun de façon ce que chaque pas couvre un arc de 1 km (qui est notre résolution) à la limite de la portée du radar. À chaque pas il faudra comparer le niveau des 8 cellules (portée de 8 km) constituant la pointe de tarte avec la profondeur du sous marin et afficher le résultat sur l'écran radar. Donc un total de 400 calculs par balayage.... Un beau problème, mais pas insurmontable.
Je met mes neurones là dessus et je vous reviens plus tard..

Salut Chris,
Fais gaffe, il y a un piège. C'est l'angle de barre qui est donné en: -30°--->0°<---+30°
Pour faire la conversion, il vaut mieux prendre: 330°--->360°<---30°
jb travaille en radians.
j'ai fait la magouille dans: Enfer de Trigo.zip mais ça n'est pas complètement au point ,niveau conversion.
Et je vois se profiler un grave soucis au niveau conservation du cap aprés coup de barre ( mémorisation des deltas x,y F de t, pour report)
Pour l'azimut, il s'agit en fait du "cap" (direction du Soum), dont Cassiope compte se servir pour définir la direction de la sonde dans le plan horizontal, et que pour ma part, j'ai fait variable, avec un afficheur dédié et un bouton de défilement.
Pas d'angles dans le plan vertical (pour l'instant.)
Le Nord, ou 360° de la carte, est comme sur toutes les cartes, en haut.
Ha ? tu mets le 90° à l'ouest ? Les pendules tournent à l'envers chez vous ?
En tant qu'ancien navigateur, je te prie de remettre le 90° à l'est.
Mets de la neige au frais pour les "scotch-on-the-rock" de cet été. ......à+.
Edité par Roland Le 29/12/2012 à 09h53
Fais gaffe, il y a un piège. C'est l'angle de barre qui est donné en: -30°--->0°<---+30°
Pour faire la conversion, il vaut mieux prendre: 330°--->360°<---30°
jb travaille en radians.
j'ai fait la magouille dans: Enfer de Trigo.zip mais ça n'est pas complètement au point ,niveau conversion.
Et je vois se profiler un grave soucis au niveau conservation du cap aprés coup de barre ( mémorisation des deltas x,y F de t, pour report)
Pour l'azimut, il s'agit en fait du "cap" (direction du Soum), dont Cassiope compte se servir pour définir la direction de la sonde dans le plan horizontal, et que pour ma part, j'ai fait variable, avec un afficheur dédié et un bouton de défilement.
Pas d'angles dans le plan vertical (pour l'instant.)
Le Nord, ou 360° de la carte, est comme sur toutes les cartes, en haut.
Ha ? tu mets le 90° à l'ouest ? Les pendules tournent à l'envers chez vous ?
En tant qu'ancien navigateur, je te prie de remettre le 90° à l'est.
Mets de la neige au frais pour les "scotch-on-the-rock" de cet été. ......à+.
Edité par Roland Le 29/12/2012 à 09h53
____________________
Roro
Roro
Allez, Cassiope, un peu de lecture, ça peut pas faire de mal:
Tu a liés : cases-map-dessin, (contraint par dim Soum = 8x8 sur carte, ) à cases-map-tableau.
ce qui fait: deplacement Soum = 8pxl/pas
Mais tu pourrais conserver dim Soum sur carte = 8x8,
Lier: case-map-tableau à pixel-carte,
ce qui règlerait les problèmes de sonar, sonde, vitesse sur carte.
Limiter l'analyse tableau à l'environnement-Soum
Evidemment, sur une carte de 50km le déplacement serait imperceptible. (necessité de sauvegarder la position Soum.
D'ailleurs, ton DSRV peut trés bien etre un Soum Nucléaire d'attaque (plus rapide), les instruments de navigation sont les memes. (barre de plongée, de direction, propulsion, sonar, ext...)
Comme le déplacement du Soum sur carte n'est pas visible en continu, et que la temporalité "utilisateur", (lecture des afficheurs, manoeuvres ext...) est plutôt en secondes qu'en ms; peu importe que le Soum ne soit déplacé que tous les N cycles ( déplacements par sauts)
Ce mic-mac éviterait de toucher à la structure générale (timer).
J'ai mis la scale de la carte dans une graphicbox, et remis les ascenceurs à la " for graphics"
(on s'amuse comme on peut..), ça va bien.
Edité par Roland Le 29/12/2012 à 10h00
Tu a liés : cases-map-dessin, (contraint par dim Soum = 8x8 sur carte, ) à cases-map-tableau.
ce qui fait: deplacement Soum = 8pxl/pas
Mais tu pourrais conserver dim Soum sur carte = 8x8,
Lier: case-map-tableau à pixel-carte,
ce qui règlerait les problèmes de sonar, sonde, vitesse sur carte.
Limiter l'analyse tableau à l'environnement-Soum
Evidemment, sur une carte de 50km le déplacement serait imperceptible. (necessité de sauvegarder la position Soum.
D'ailleurs, ton DSRV peut trés bien etre un Soum Nucléaire d'attaque (plus rapide), les instruments de navigation sont les memes. (barre de plongée, de direction, propulsion, sonar, ext...)
Comme le déplacement du Soum sur carte n'est pas visible en continu, et que la temporalité "utilisateur", (lecture des afficheurs, manoeuvres ext...) est plutôt en secondes qu'en ms; peu importe que le Soum ne soit déplacé que tous les N cycles ( déplacements par sauts)
Ce mic-mac éviterait de toucher à la structure générale (timer).
J'ai mis la scale de la carte dans une graphicbox, et remis les ascenceurs à la " for graphics"
(on s'amuse comme on peut..), ça va bien.
Edité par Roland Le 29/12/2012 à 10h00
____________________
Roro
Roro
Salut chris, ton optimisme fait vraiment plaisir à lire.
Tu as effectivement TOUT compris.
Oui, le référentiel d'azimut a le 0 degré en haut (le nord), mais je voyais plutôt le 90° à droite, le radar tournant dans le sens des aiguilles d'une montre ( et la boucle dans le code de 0 à 360° ).
Les coordonnées cartésiennes à lire dans la MAP() se situe sur la trajectoire suivie par le soum (228° par exemple). Reste effectivement à définir sur combien de cases c'est à dire la portée du radar par rapport à la définition de la carte...

On doit parcourir les cases touchées par cette trajectoire sur une longueur égale à la portée du radar, et un point doit s'afficher sur le radar QUE si sa profondeur lu sur la carte est <= à celle du soum. Dès qu'un seul point est dessiné ou qu'on est arrivé en bout de portée : on passe à l'angle suivant c'est à dire +1°, etc...
Faudra certainement relier graphiquement ces points entre eux...
Je pense qu'il faut revoir la définition de la carte : peut-être une case = 100m et la portée du radar pourrait être de 1000m par exemple, ce qui ferait 10 cases à surveiller par pas du radar c'est à dire 3600 opérations pour une rotation complête du radar !!!!
Le graphique des profondeurs indiqué par la sonde bathymétrique en dessous du radar doit lire TOUTES les cases de la MAP situées sur cette trajectoire et dans sa limite de portée AV/AR et profondeur...
Pour tous ces calculs on a besoin du cap (228° dans l'exemple) et des coordonnées actuelles du soum sur la carte (dsrvX,dsrvY).
Roland, lui, est absorbé par les calculs de représentation de l'effet des commandes du pilotes sur dsrvX,dsrvY et sur le cap (value(1)).
C'est vrai que c'est pas simple non plus ça !!!
Il faudra trouver plein d'astuces pour rendre tout ça à peu près réaliste...
Ceci dit, je l'ai bien précisé dès le début : il s'agit juste d'une tentative
Si ça doit devenir une trop grosse usine à gaz, ou qu'on ne parvient pas à rendre ça jouable : on laisse tomber.
Roland m'a fait remarqué que j'avais commençé par la fin, et c'est vrai que je n'avais peut-être pas bien évalué la masse de calculs à effectuer, surtout pendant que le radar tourne
Chris, si tu as quelconque soucis avec la compréhension du code, n'hésite pas une seconde. Le but est aussi que ça te plaise d'explorer JB et ce que tu pourrais faire avec
Bonne et heureuse année 2013.
@+
Edité par cassiope01 Le 29/12/2012 à 11h32
Tu as effectivement TOUT compris.
Oui, le référentiel d'azimut a le 0 degré en haut (le nord), mais je voyais plutôt le 90° à droite, le radar tournant dans le sens des aiguilles d'une montre ( et la boucle dans le code de 0 à 360° ).
Les coordonnées cartésiennes à lire dans la MAP() se situe sur la trajectoire suivie par le soum (228° par exemple). Reste effectivement à définir sur combien de cases c'est à dire la portée du radar par rapport à la définition de la carte...

On doit parcourir les cases touchées par cette trajectoire sur une longueur égale à la portée du radar, et un point doit s'afficher sur le radar QUE si sa profondeur lu sur la carte est <= à celle du soum. Dès qu'un seul point est dessiné ou qu'on est arrivé en bout de portée : on passe à l'angle suivant c'est à dire +1°, etc...
Faudra certainement relier graphiquement ces points entre eux...
Je pense qu'il faut revoir la définition de la carte : peut-être une case = 100m et la portée du radar pourrait être de 1000m par exemple, ce qui ferait 10 cases à surveiller par pas du radar c'est à dire 3600 opérations pour une rotation complête du radar !!!!
Le graphique des profondeurs indiqué par la sonde bathymétrique en dessous du radar doit lire TOUTES les cases de la MAP situées sur cette trajectoire et dans sa limite de portée AV/AR et profondeur...
Pour tous ces calculs on a besoin du cap (228° dans l'exemple) et des coordonnées actuelles du soum sur la carte (dsrvX,dsrvY).
Roland, lui, est absorbé par les calculs de représentation de l'effet des commandes du pilotes sur dsrvX,dsrvY et sur le cap (value(1)).
C'est vrai que c'est pas simple non plus ça !!!
Il faudra trouver plein d'astuces pour rendre tout ça à peu près réaliste...
Ceci dit, je l'ai bien précisé dès le début : il s'agit juste d'une tentative

Si ça doit devenir une trop grosse usine à gaz, ou qu'on ne parvient pas à rendre ça jouable : on laisse tomber.
Roland m'a fait remarqué que j'avais commençé par la fin, et c'est vrai que je n'avais peut-être pas bien évalué la masse de calculs à effectuer, surtout pendant que le radar tourne

Chris, si tu as quelconque soucis avec la compréhension du code, n'hésite pas une seconde. Le but est aussi que ça te plaise d'explorer JB et ce que tu pourrais faire avec

Bonne et heureuse année 2013.
@+
Edité par cassiope01 Le 29/12/2012 à 11h32
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."
Web
Cassiope, a-tu lu mon message ( 4ème en partant du bas) de la page précédente, concernant la vitesse et le timer ?
____________________
Roro
Roro
celui du lièvre ?
oui.
Et ?
oui.
Et ?
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."
Web
Pour dire qu'il faut se caler sur ce 1 pxl / cycle, ou 1pxl / 10 cycles pour déterminer l'echelle carte.
Sinon, il faut revoir le fonctionnement général (timer), ce qui serait dommage
Parce que comme c'est. C'est bien clair, et facile à gérer.
Mais bon, à :coeur vaillant docteur es' Jb...rien d'impossible... .........à+.
Sinon, il faut revoir le fonctionnement général (timer), ce qui serait dommage
Parce que comme c'est. C'est bien clair, et facile à gérer.
Mais bon, à :
____________________
Roro
Roro
Bonjour!
Oui, peut être qu'une diminution d'échelle rendrait le jeu plus réaliste... Les obstacles éventuels seraient plus près et on devrait faire gaffe plus rapidement si on ne veut pas se cogner contre un obstacle...
Cassiope, tu ne crois pas que c'est beaucoup de calculs à 1 degré par step (360 steps)??? Ça va bouffer du temps machine...Compte tenu de la résolution de notre base de donnée je crois que c'est inutile.
Je pense que si on faisait un step de 7,5 degrés ( 48 steps pour un tour) ce serait suffisant, du moins pour les calculs (en périphérie du radar, on aurait approximativement une résolution d'un carré dans la base de donnée) . Pour l'affichage sur l'écran radar ce serait autre chose.
Je vais commencer à travailler un scénario, et après, s'il faut le modifier par la suite, ce sera facile.
Voici par quoi je vais commencer:
À l'aide de la position en x et y du soum , de sa profondeur et de sa direction, je vais faire un algorithme de calcul pour 360 degrés, par étape de 7,5 degrés (48 steps) et je vais stocker les résultats dans une matrice de 48 par 8 (48 pointes de tarte chacune séparée en 8 segments). Si le contenu de la position vaut zéro, ce sera qu'il n'y a pas d'obstacle, et s'il vaut 1 c'est qu'il y en aura un.
Croyez vous que vous seriez capable de faire afficher une telle base de donnée comme s'il s'agissait d'un écran radar (balayage vectoriel)?
Si vous préférez autre chose laissez le moi savoir....
Oui, peut être qu'une diminution d'échelle rendrait le jeu plus réaliste... Les obstacles éventuels seraient plus près et on devrait faire gaffe plus rapidement si on ne veut pas se cogner contre un obstacle...
Cassiope, tu ne crois pas que c'est beaucoup de calculs à 1 degré par step (360 steps)??? Ça va bouffer du temps machine...Compte tenu de la résolution de notre base de donnée je crois que c'est inutile.
Je pense que si on faisait un step de 7,5 degrés ( 48 steps pour un tour) ce serait suffisant, du moins pour les calculs (en périphérie du radar, on aurait approximativement une résolution d'un carré dans la base de donnée) . Pour l'affichage sur l'écran radar ce serait autre chose.
Je vais commencer à travailler un scénario, et après, s'il faut le modifier par la suite, ce sera facile.
Voici par quoi je vais commencer:

À l'aide de la position en x et y du soum , de sa profondeur et de sa direction, je vais faire un algorithme de calcul pour 360 degrés, par étape de 7,5 degrés (48 steps) et je vais stocker les résultats dans une matrice de 48 par 8 (48 pointes de tarte chacune séparée en 8 segments). Si le contenu de la position vaut zéro, ce sera qu'il n'y a pas d'obstacle, et s'il vaut 1 c'est qu'il y en aura un.
Croyez vous que vous seriez capable de faire afficher une telle base de donnée comme s'il s'agissait d'un écran radar (balayage vectoriel)?
Si vous préférez autre chose laissez le moi savoir....
Tu as sans doute raison chris pour les calculs inutiles compte tenu de la faible définition de la carte.
Je pense qu'au moment où tu mettras 1 ou 0 dans une case de ta matrice, on doit pouvoir tout aussi bien allumer ou éteindre un point sur l'écran du radar !!!
En tout cas c'est à essayer
@+
Je pense qu'au moment où tu mettras 1 ou 0 dans une case de ta matrice, on doit pouvoir tout aussi bien allumer ou éteindre un point sur l'écran du radar !!!

En tout cas c'est à essayer

@+
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."
Web
Salut Chris,
Dans l'état actuel de l'echelle, le sonar ayant 7Km de portée, on peut résumer la surface balayée par un cercle inscrit dans un carré de 7 x 2 = 14 cases de coté + la case centrale =15 cases.
Regarde ce que j'ai fait: 10ieme post en partant du haut de la page 2.
Dans ce bidouillage je lis et affiche les 15 X 15 cases de carte, ligne par ligne (ou colonne par colonne à voir)
Il faut mettre le bidouillage dans le dossier de Cassiope pour qu'il accede aux bmp's.
Je n'ai mis qu'un point, là où il devrait y avoir un carré pour etre fidèle à la carte.
Tu comprendra en faisant fonctionner que le problème c'est l'echelle.
Que l'on lise la carte de façon vectorielle ou tout autre.
Mais si tu arrive à faire une procédure de lecture vectorielle d'un tableau, ce sera une "première".
Pour un affichage "expérimental", entre: "Claudevdw "dans la fenêtre de recherche ,
Tu atterri sur une page. descends dans les messages jusqu'au: 05 / 04 / 12.
Il y a là un tableau de 10 x 11 textbox qui peut servir à afficher des données.
Si tu n'a pas encore vu le sujet, il risque de te plaire. ........à+.
Edité par Roland Le 29/12/2012 à 23h46
Dans l'état actuel de l'echelle, le sonar ayant 7Km de portée, on peut résumer la surface balayée par un cercle inscrit dans un carré de 7 x 2 = 14 cases de coté + la case centrale =15 cases.
Regarde ce que j'ai fait: 10ieme post en partant du haut de la page 2.
Dans ce bidouillage je lis et affiche les 15 X 15 cases de carte, ligne par ligne (ou colonne par colonne à voir)
Il faut mettre le bidouillage dans le dossier de Cassiope pour qu'il accede aux bmp's.
Je n'ai mis qu'un point, là où il devrait y avoir un carré pour etre fidèle à la carte.
Tu comprendra en faisant fonctionner que le problème c'est l'echelle.
Que l'on lise la carte de façon vectorielle ou tout autre.
Mais si tu arrive à faire une procédure de lecture vectorielle d'un tableau, ce sera une "première".
Pour un affichage "expérimental", entre: "Claudevdw "dans la fenêtre de recherche ,
Tu atterri sur une page. descends dans les messages jusqu'au: 05 / 04 / 12.
Il y a là un tableau de 10 x 11 textbox qui peut servir à afficher des données.
Si tu n'a pas encore vu le sujet, il risque de te plaire. ........à+.
Edité par Roland Le 29/12/2012 à 23h46
____________________
Roro
Roro
Voici ce que pourrait donner une représentation radar d'obstacles situés aléatoirement à une distance entre 65 et 95 pixels du soum, testé tout les 7.5°...
C'est juste un test et là le soum est mal barré puisqu'entouré de mur
Mais ça montre que tout ça est peut-être plus simple à mettre en oeuvre que je ne le pensais... en seulement quelques lignes de code dans la routine [sonar] !
Le rayon du radar est de 100 pixels.
Ces 100 pixels représentent la portée du radar.
Quand la variable "r" dans la routine [sonar] est à 0 (vertical en haut), ça doit correspondre à l'avant du soum, et devrait donc correspondre au cap actuel du soum pour scruter la MAP()...
La distance de détection du premier obstacle à sa profondeur et dans sa direction actuelle devra donc être ramené à une valeur de 0 à 100, mais ma petite function scale() pourra sans doute s'en charger
La suite est dans tes main chris
Code VB :
@+
Edité par cassiope01 Le 30/12/2012 à 11h38
C'est juste un test et là le soum est mal barré puisqu'entouré de mur

Mais ça montre que tout ça est peut-être plus simple à mettre en oeuvre que je ne le pensais... en seulement quelques lignes de code dans la routine [sonar] !
Le rayon du radar est de 100 pixels.
Ces 100 pixels représentent la portée du radar.
Quand la variable "r" dans la routine [sonar] est à 0 (vertical en haut), ça doit correspondre à l'avant du soum, et devrait donc correspondre au cap actuel du soum pour scruter la MAP()...
La distance de détection du premier obstacle à sa profondeur et dans sa direction actuelle devra donc être ramené à une valeur de 0 à 100, mais ma petite function scale() pourra sans doute s'en charger

La suite est dans tes main chris

Code VB :
' Submarine DSRV Simulator... (Deep Submergence Rescue Vehicle) nomainwin WindowWidth = 835 WindowHeight = 505 UpperLeftX = int((DisplayWidth-WindowWidth) / 10) UpperLeftY = 10 'int((DisplayHeight-WindowHeight) / 12) mois$ = "Jan Fév Mar Avr Mai Jun Jui Aou Sep Oct Nov Déc" ' mois$ = "January February March April May June July August September October November December" 'US format today$ = date$("mm/dd/yyyy") j = date$(today$) jsem$ = word$("Mar Mer Jeu x Ven Sam x Dim Lun",int((j/7-int(j/7))*10)+1) ' jsem$ = word$("Tue Wed Thu x Fri Sat x Sun Mon",int((j/7-int(j/7))*10)+1) date$ = jsem$+" "+mid$(today$,4,2)+" "+word$(mois$, val(today$))+" "+left$(time$(),5)'right$(today$,4) ' date$ = jsem$+" "+word$(mois$, val(today$))+", "+mid$(today$,1,2)+" "+left$(time$(),5)'right$(today$,4) ' US format dim info$(1,1) Fcolor$ = "buttonface" BackgroundColor$ = Fcolor$ ForegroundColor$ = "darkred" statictext #w.title, "- DSRV -", 60, 20, 130, 40 GROUPBOX #w.tazimu, "Azimuth", 240, 8, 158, 70 graphicbox #w.azimu, 250, 30, 121, 39 statictext #w.Uazimu, "°", 378, 30, 15, 15 GROUPBOX #w.tsonar, "SONAR", 180, 80, 232, 240 graphicbox #w.sonar, 190, 100, 210, 210 GROUPBOX #w.tdepth, "Depth", 5, 80, 168, 80 graphicbox #w.depth 15, 105, 121, 39 statictext #w.Udepth, "m", 140, 130, 25, 15 GROUPBOX #w.tspeed, "Speed", 5, 180, 168, 80 graphicbox #w.speed 15, 205, 121, 39 statictext #w.Uspeed, "nds", 140, 230, 25, 15 GROUPBOX #w.tassiet, "Tilting", 5, 280, 168, 80 graphicbox #w.assiet 15, 305, 121, 39 statictext #w.Uassiet, "°", 142, 305, 15, 15 GROUPBOX #w.tpressu, "Pressure", 5, 380, 168, 80 graphicbox #w.pressu 15, 405, 121, 39 statictext #w.Upressu, "kpa", 140, 430, 25, 15 GROUPBOX #w.tsonde, "SONDE BATHYMETRIQUE", 180, 330, 232, 135 graphicbox #w.sonde 190, 355, 210, 100 graphicbox #w.cmds 420, 10, 398, 455 ' command graphic window open space$(10)+"DSRV Submarine Simulator"+space$(20)+date$ for window_nf as #w #w "trapclose [exit]" ' ------------------------------------------ init graphics ----------------------------------------- #w.title "!font arial 24 bold" #w.Uazimu "!font arial 16 bold" #w.Uassiet "!font arial 16 bold" #w.Udepth "!font arial 10 bold" #w.Uspeed "!font arial 10 bold" #w.Upressu "!font arial 10 bold" for t = 1 to 7 hdle$ = "#w."+word$("tazimu tsonar tdepth tspeed tassiet tpressu tsonde",t) #hdle$ "!font arial 10 bold" hdle$ = "#w."+word$("azimu depth speed assiet pressu sonde cmds",t) #hdle$ "down ; fill black" next dim n$(11,3) ' leds numbers file loadbmp "LedOrange", "Num_leds_orange_M.bmp" loadbmp "LedRed", "Num_leds_red_M.bmp" loadbmp "LedGreen", "Num_leds_green_M.bmp" loadbmp "Curs", "CursorSprite.bmp" loadbmp "lever", "Orange.bmp" loadbmp "mapButtons", "Bouton_Map.bmp" loadbmp "slicer1", "SlicerV80.bmp" loadbmp "slicer2", "SlicerH80.bmp" loadbmp "slicer3", "SlicerV80.bmp" loadbmp "UpDwBt", "UpDwButton.bmp" loadbmp "egual", "Egual.bmp" loadbmp "notegual", "EgualNot.bmp" for c = 1 to 3 #w.cmds "drawbmp ";word$("LedGreen LedOrange LedRed",c);" 0 0" for i = 0 to 11 n$(i,c) = "n"+str$(c)+right$(str$(100+i),2) ' store each bmp digit names in n$(number,color) #w.cmds "getbmp ";n$(i,c);" ";1+i*24;" 1 25 39" next next unloadbmp "LedOrange" unloadbmp "LedRed" unloadbmp "LedGreen" #w.cmds "drawbmp mapButtons 0 0" #w.cmds "getbmp mapOff 3 2 56 77" ' button map Off/On #w.cmds "getbmp mapOn 67 2 56 77" unloadbmp "mapButtons" #w.cmds "addsprite lever1 lever" #w.cmds "addsprite lever2 lever" #w.cmds "addsprite lever3 lever" #w.cmds "addsprite curs Curs" ' cursor to place at mouse coord. for "spritecollides" events... #w.cmds "spritevisible curs off" unloadbmp "Curs" FdCmdColor$ = "51 51 51" ' gray #w.cmds "fill ";FdCmdColor$ #w.cmds "drawbmp mapOff 300 340" ' map button #w.cmds "drawbmp slicer1 78 3" #w.cmds "drawbmp slicer2 5 202" #w.cmds "drawbmp slicer3 78 253" #w.cmds "backcolor ";FdCmdColor$;" ; color lightgray" #w.cmds "place 20 106 ;|Depth" #w.cmds "place 210 230 ;|Dir." #w.cmds "place 16 356 ;|Engine" #w.cmds "place 300 20 ;|Ballast" #w.cmds "backcolor lightgray" for y = 40 to 160 #w.cmds "place 290 ";y;" ; circlefilled 12" #w.cmds "place 355 ";y;" ; circlefilled 12" next #w.cmds "backcolor blue ; color blue" #w.cmds "place 290 160 ; circlefilled 12" #w.cmds "place 355 160 ; circlefilled 12" #w.cmds "backcolor lightgray ; color lightgray" #w.cmds "place 278 148 ; boxfilled 302 160" #w.cmds "place 343 148 ; boxfilled 367 160" #w.cmds "drawbmp notegual 305 84" #w.cmds "drawbmp UpDwBt 272 212" #w.cmds "drawbmp UpDwBt 338 212" unloadbmp "UpDwBt" #w.cmds "backcolor ";FdCmdColor$;" ; color 120 120 120" #w.cmds "place 130 20 ;|20°" #w.cmds "place 130 100 ;|_" #w.cmds "place 130 190 ;|- 20°" #w.cmds "place 5 260 ;|-30°" #w.cmds "place 180 260 ;|30°" #w.cmds "place 274 198 ;|Front Back" #w.cmds "place 130 270 ;|Full" #w.cmds "place 130 312 ;|1/2" #w.cmds "place 130 356 ;|STOP" #w.cmds "place 130 410 ;|Reverse" #w.cmds "getbmp bckg 0 0 398 455" #w.cmds "background bckg" #w.cmds "spritexy lever1 84 83" #w.cmds "spritexy lever2 84 206" #w.cmds "spritexy lever3 84 334" #w.cmds "drawsprites" #w.cmds "flush" #w.sonar "down ; fill ";Fcolor$ #w.sonar "backcolor 0 80 0 ; home ; circlefilled 100" ' the sonar. #w.sonar "flush ; discard" ' -------------------------------------------- init var. ------------------------------------ dc = 8 ' dim of a map cell in pixels. Xmax = 100 ' nber of X cells for the map Ymax = 50 ' nber of Y cells for the map egual = 0 ' for ballasts mass = 38600 ' of the submarine 38600 = 30500 (in surface) + 4050 (front ballasts) + 4050 (back ballast) dim map(Xmax,Ymax) ' map dsrvX = 30 ' current x pos Submarine dsrvY = 10 ' current y pos " olddsrvX = dsrvX ' old x pos Submarine olddsrvY = dsrvY ' old y pos " value(1) = 264.1 ' azimuth ° SUBMARINE ROAD 1 -> 360° value(2) = -10 ' depth m (3.281 pieds (ft) ) ( 1 pied = 0.30478513 m ) value(3) = 0.0 ' speed noeud (knots 1 kt = 1.852 km/h or 0.514 m/s) value(4) = -1 ' tilting ° value(5) = 110 ' pressure kpa (10 kpa = 0.1 bar) 110=1.1 bar à 10 mètres de profondeur '--------------------------------------------------------------------------------------------- ' Features of rescue submarine DSRV: AVALON. (Deep Submergence Rescue Vehicle) ' dim. 15m x 2.4m x 2.6m ' mass : 30.5 t/surface, 38.6 t/diving (max 5000 ft = 1524 m) (implosion: 2500 m) ' speed : 4.1 kts max 2.5 kts transit 1.5 kts search ' speed of ascent max 100ft/min (30.4m/min) ' propulsion : 7CV electrtic engine , 1 orientable propeller (vertical +/-20° max, horizontal +/-30° max) ' autonomy max : 30h ' Obstical Avoidance Sonar (max range 8000 yards = 7.3152km) ' Altitude/depth Sonar (bathymetric probe range) 0-5000 ft (1524m) '--------------------------------------------------------------------------------------------- GOSUB [ReadMapFile] #w.cmds "when leftButtonDown [command]" #w.cmds "when leftButtonMove [MoveCmd]" ' user actions #w.cmds "when leftButtonUp [endCmd]" [sonar] ' called time loop : this label must update ALL displays... ' scan r = r+1-360*(r=360) ' 360 -> 1 for a=1 to 20 ' radar effect #w.sonar "color 0 ";75+a*5;" 0 ; size 3 ; delsegment "; drawSegment - 1 #w.sonar "home ; north ; turn ";r+a;" ; go 100 ; segment drawSegment" next if (r mod 7.5) = 0 then ' test : draw every 7.5° #w.sonar "home ; north ; turn ";r;" ; up ; go ";65+rnd(0)*30 ' distance aléatoire du centre. #w.sonar "color green ; down ; posxy gX gY" if oldgX>0 and oldgY>0 then #w.sonar "size 1 ; goto ";oldgX;" ";oldgY end if oldgX = gX : oldgY = gY end if #w.sonar, "flush ; discard" ' display value(v) v = v+1-5*(v=5) ' 5 -> 1 gosub [displayValue] gosub [displaySonde] '------- ballast ------------------------ select case ' Front side case (egual=1 and abs(BlstBack-BlstFront)>1) ' to equilibrate the 2 ballasts if BlstFront < BlstBack then BlstFrontChge = 1 else BlstFrontChge = -1 case ((BlstBackUp=1 and egual=1) or BlstFrontUp=1) and BlstFront<123 : BlstFrontChge = 1 ' left button up case ((BlstBackDw=1 and egual=1) or BlstFrontDw=1) and BlstFront>0 : BlstFrontChge = -1 ' left button down end select select case ' Back side case (egual=1 and abs(BlstBack-BlstFront)>1) ' to equilibrate the 2 ballasts if BlstBack < BlstFront then BlstBackChge = 1 else BlstBackChge = -1 case ((BlstFrontUp=1 and egual=1) or BlstBackUp=1) and BlstBack<123 : BlstBackChge = 1 ' right button up case ((BlstFrontDw=1 and egual=1) or BlstBackDw=1) and BlstBack>0 : BlstBackChge = -1 ' right button down end select if BlstFrontChge <> 0 then ' display Front Ballast if BlstFrontChge>0 then Bcolor$ = "blue" else Bcolor$ = "lightgray" gosub [SpriteOff] #w.cmds "backcolor ";Bcolor$;" ; color ";Bcolor$;" ; place 278 ";160-BlstFront;" ; goto 302 ";160-BlstFront gosub [SpriteBckG] BlstFront = BlstFront + BlstFrontChge BlstFrontChge = 0 ' BlstFront = 0 to 123 (0 to 4050 kg) BlstFrontMass = scale(BlstFront,0,120,0,4050) mass = 30500 + BlstFrontMass + BlstBackMass ' so never more than 38600 Kg. 'print "DSRV mass = 30500 + ";BlstFrontMass;" + ";BlstBackMass;" = ";mass end if if BlstBackChge <> 0 then ' display Back Ballast if BlstBackChge>0 then Bcolor$ = "blue" else Bcolor$ = "lightgray" gosub [SpriteOff] #w.cmds "backcolor ";Bcolor$;" ; color ";Bcolor$;" ; place 343 ";160-BlstBack;" ; goto 367 ";160-BlstBack gosub [SpriteBckG] BlstBack = BlstBack + BlstBackChge BlstBackChge = 0 ' BlstBack = 0 to 123 (0 to 4050 kg) BlstBackMass = scale(BlstBack,0,120,0,4050) mass = 30500 + BlstFrontMass + BlstBackMass ' so never more than 38600 Kg. 'print "DSRV mass = 30500 + ";BlstFrontMass;" + ";BlstBackMass;" = ";mass end if '----------------------------------------- gosub [compute] ' calculate all values gosub [DispDSRVpos] ' on map if opened timer 16, [sonar] wait [compute] ' to simulate inertia, commands could be divided by 10 ? 'value(1) = road : to calculate with Direction & Engine commands 'value(2) = depth : to calculate with Depth & Ballasts & Engine commands 'value(3) = speed : to calculate with Engine & Ballasts commands 'value(4) = tilting : to calculate with Depth & Engine & Ballasts commands value(5) = abs(value(2)*11) ' water pressure on the submarine. 'dsrvX = x pos of the DSRV (cell 0 to 100) 'dsrvY = y pos of the DSRV (cell 0 to 50) return [command] ' when leftButtonDown #w.cmds "spritexy curs ";MouseX;" ";MouseY ' move sprite 'curs' under the mouse to know collides event. #w.cmds "spritecollides curs list$" currentLever$ = "" if list$<>"" then currentLever$ = word$(list$,1) #w.cmds "spritexy? ";currentLever$;" cmX cmY" offsetX = MouseX-cmX offsetY = MouseY-cmY ' needed to sprite following mouse arrow end if #w.cmds "spritexy? curs cmX cmY" value(1) = cmX ' temporary : just for debug value(2) = cmY select case case cmX>300 and cmX<300+56 and cmY>340 and cmY<340+77 ' MAP button pressed. if mapDisp = 1 then mapDisp = 0 else mapDisp = 1 gosub [SpriteOff] #w.cmds "drawbmp ";word$("mapOff mapOn",mapDisp+1);" 300 340" ' maj MAP button gosub [SpriteBckG] if mapDisp then gosub [openMap] else [closeMap] case cmX>272 and cmX<310 and cmY>212 and cmY<247 : BlstFrontUp = 1 ' commands for ballasts case cmX>272 and cmX<310 and cmY>247 and cmY<288 : BlstFrontDw = 1 case cmX>340 and cmX<380 and cmY>212 and cmY<247 : BlstBackUp = 1 case cmX>340 and cmX<380 and cmY>247 and cmY<288 : BlstBackDw = 1 case cmX>305 and cmX<341 and cmY>84 and cmY<120 if egual = 1 then egual = 0 else egual = 1 gosub [SpriteOff] #w.cmds "drawbmp ";word$("notegual egual",egual+1);" 305 84" ' change button egual/notegual gosub [SpriteBckG] end select #w.cmds "drawsprites" wait [SpriteOff] ' for maj sprites background for s=1 to 3 : #w.cmds "spritevisible lever";s;" off" : next #w.cmds "drawsprites" return [SpriteBckG] #w.cmds "getbmp bckg 0 0 398 455" ' maj sprites background #w.cmds "background bckg" for s=1 to 3 : #w.cmds "spritevisible lever";s;" on" : next #w.cmds "drawsprites" return [MoveCmd] ' when leftButtonMove : lever set if currentLever$ <> "" then currentY = MouseY-offsetY currentX = MouseX-offsetX select case val(right$(currentLever$,1)) case 1 if currentY>0 and currentY<168 then if currentY>76 and currentY<90 then currentY = 83 ' middle position #w.cmds "spritexy ";currentLever$;" 84 ";currentY Depth = 83-currentY DepthScaled = scale(Depth,0,80,0,20) '+/- 20° 'print "Depth = ";Depth;" Scaled = ";DepthScaled end if case 2 if currentX>0 and currentX<170 then if currentX>76 and currentX<90 then currentX = 84 ' middle position #w.cmds "spritexy ";currentLever$;" ";currentX;" 206" Direction = currentX-84 DirectionScaled = scale(Direction,0,80,0,30) '+/- 30° 'print "Direction = ";Direction;" Scaled = ";DirectionScaled end if case 3 if currentY>248 and currentY<415 then if currentY>328 and currentY<340 then currentY = 334 ' middle position #w.cmds "spritexy ";currentLever$;" 84 ";currentY Engine = 334-currentY EngineScaled = scale(Engine,0,80,0,100) ' ?? 'print "Engine = ";Engine;" Scaled = ";EngineScaled end if end select #w.cmds "drawsprites" end if wait [endCmd] ' when leftButtonUp BlstFrontUp = 0 BlstFrontDw = 0 BlstBackUp = 0 BlstBackDw = 0 currentLever$ = "" wait [DispDSRVpos] ' display the current position of the DSRV on the map. if mapDisp and olddsrvX<>dsrvX and olddsrvY<>dsrvY then Dcolor$ = "0 ";255-map(olddsrvX,olddsrvY);" 255" #map "size 1 ; backcolor ";Dcolor$;" ; color ";Dcolor$ #map "place ";olddsrvX*dc;" ";olddsrvY*dc;" ;boxfilled ";olddsrvX*dc+dc;" ";olddsrvY*dc+dc #map "backcolor red ; color red" #map "size ";dc-1;" ; set ";dsrvX*dc+dc/2;" ";dsrvY*dc+dc/2 ' current x,y pos Submarine #map "flush ; discard" olddsrvX = dsrvX olddsrvY = dsrvY end if return [openMap] ' when click on MAP button UpperLeftX = UpperLeftX + 10 UpperLeftY = UpperLeftY + WindowHeight WindowWidth = 810 WindowHeight = 462 open "DSRV Map" for graphics_nf_nsb as #map #map "trapclose [closeMap]" #map "down ; fill black" Xg = 250 for c = 1 to Xg ' deep scale #map "backcolor black ; color yellow " if c=1 or c mod 10 = 0 or c=Xg then #map "place ";5+(c-1)*int((WindowWidth-20)/Xg);" 18;|";c #map "color black ; place ";10+(c-1)*int((WindowWidth-20)/Xg);" 25" #map "backcolor 0 ";255-c;" 255 ; boxfilled ";12+c*int((WindowWidth-20)/Xg);" ";25+20 next #map "backcolor black ; color yellow ; place ";WindowWidth-46;" 40 ;|x10 m" #map "backcolor 253 238 153 ; place 0 26 ; boxfilled 10 44" ' MAP reading... for y=0 to Ymax for x=0 to Xmax Dcolor$ = "0 ";255-map(x,y);" 255" if map(x,y) = 0 then Dcolor$ = "253 238 153" #map "place ";x*dc;" ";50+y*dc;" ; backcolor ";Dcolor$;" ; color ";Dcolor$ #map "boxfilled ";x*dc+dc;" ";50+y*dc+dc next next ' display the current position of the DSRV on the map. Dcolor$ = "0 ";255-map(olddsrvX,olddsrvY);" 255" #map "backcolor ";Dcolor$;" ; color ";Dcolor$ #map "place ";olddsrvX*dc;" ";olddsrvY*dc;" ;boxfilled ";olddsrvX*dc+dc;" ";olddsrvY*dc+dc #map "backcolor red ; color red" #map "size ";dc-1;" ; set ";dsrvX*dc+dc/2;" ";dsrvY*dc+dc/2 ' current x,y pos Submarine #map "flush ; discard" olddsrvX = dsrvX olddsrvY = dsrvY return [ReadMapFile] filename$ = "map.txt" if fileExists(DefaultDir$, filename$) then open filename$ for input as #grid for y=0 to Ymax LINE INPUT #grid, grid$ for x=0 to Xmax : map(x,y)=val(word$(grid$,x+1)) : next next close #grid else notice "No file ";upper$(filename$) goto [exit] end if return [closeMap] if mapDisp then mapDisp = 0 close #map gosub [SpriteOff] #w.cmds "drawbmp mapOff 300 340" ' maj MAP button gosub [SpriteBckG] WindowWidth = 835 ' restore #w setup WindowHeight = 505 UpperLeftX = int((DisplayWidth-WindowWidth) / 10) UpperLeftY = 10 wait [displayValue] ' display current value( v ) hdle$ = "#w."+word$("azimu depth speed assiet pressu",v) ' give the right handle$ for current v. s = 0 : t$=right$(str$(100000+int(abs(value(v)))),5) ' 5 digits. if v=1 or v=3 then t$=right$(str$(100000+int(abs(value(v)*10))),5) ' decimal nb colr = 1 ' threshold for colors : colr 1 = green, colr 2 = orange, colr 3 = red (dangerous!) if (v=2 or v=5) and (value(2)*4)>1000 then colr = 2 ' depth and so pressure orange if (v=2 or v=5) and (value(2)*4)>1524 then colr = 3 ' depth and so pressure red if v=4 and value(v)>10 then colr = 2 ' tilt > 10° : orange if v=4 and value(v)>20 then colr = 3 ' tilt > 20° : red for c=1 to 5 : d=val(mid$(t$,c,1)) select case case (v=1 and c<2) or (v=3 and c<3) :d=11 'empty digit case v=2 and c=1 :d=10 case v=4 and c<4 :d=11 : if c=3 and value(v)<0 then d=10 'negative digit end select #hdle$ "drawbmp ";n$(d,colr);" ";s;" 0 ; delsegment ";dSegment-1 : s=s+24 if v=3 or v=1 then #hdle$ "color green ; size 2 ; set ";4*24;" 36" end if #hdle$ "segment dSegment" next #hdle$ "flush ; discard" return [displaySonde] ' read map(dsrvX,dsrvY) to draw depth just (500m front/back) to 1524m under the submarine respecting it's road (cape) ' To code...!!! #w.sonde "color darkblue ; delsegment ";dSegmt-1 #w.sonde "place 105 0 ; turn 180 ; go 100 ; segment dSegmt" #w.sonde "flush ; discard" return FUNCTION scale(value,InMin,InMax,OutMin,OutMax) ' same of the map(value, fromLow, fromHigh, toLow, toHigh) command in Arduino language ;) scale = (value - InMin) * (OutMax - OutMin) / (InMax - InMin) + OutMin END FUNCTION FUNCTION fileExists(path$, filename$) 'DIM info$(1,1) must be declared at the start of the prog. files path$, filename$, info$( ' path$ = 'DefaultDir$' generally. fileExists = val(info$(0, 0)) 'not zero if true END FUNCTION [exit] timer 0 close #w if mapDisp then close #map unloadbmp "lever" unloadbmp "egual" unloadbmp "notegual" end
@+
Edité par cassiope01 Le 30/12/2012 à 11h38
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."
Web
Nickel ! En pixels.
Il faudrait faire passer un vecteur d'éffacement avec disons 45 ou 90° de retard sur le vecteur d'affichage, pour avoir l'effet de rémanence des scopes radars/sonars.
Que pense-tu de lier cases-map-tableau à pixels-map ?
Le tableau ne serait rempli qu'une fois au départ. Et ne serait lu que partiellement: 200 x 200 ( et pas obligé d'afficher sur le scope avec 1pxl de résolution on peut facilement diviser par trois, en utilisant des set-points .
Et meme faire une zone d'exclusion autour du Soum du genre: trop prés, c'est crashé. ça économiserait du temps de calcul ) Cela parait jouable.
Au niveau conversion, ça avance (sans l'aide des matheux, mais ils me donnent à réfléchir, ça aide aussi...)
J'ai merdoyé un moment à cause de l'angle du min/max de l'angle de barre.
Pour avoir le plein effet, il faut la pleine echelle: 270°---> 0° <--- 90°.
Hé oui! La simulation, c'est avant tout: une grosse arnaque vis à vis de l'utilisateur.
La formule est encore incomplète et corrompue, mais y'a de l'espoir.
A gauche: Tout va bien, ça tourne, et fait demi-tour si la barre est maintenue.
A droite: ça merde; sans doute à cause du deuxième membre manquant dans l'équation des y.
En marche arrière: Y'a soucis (inversion par rapport à "l'attendu")
Je pense qu'il faut doubler l'équation en interpolant. ( j'ai mis les matheux sur les bons rails, s'ils ne piccolent pas trop pour les fêtes
ça devrait le faire)
Je modifie le zip.
Il reste à gérer la conservation du mouvement. Mais je vois à peu prés comment faire.
....Bonnes fêtes!...Et foin de la modération...
Edité par Roland Le 30/12/2012 à 14h58

Il faudrait faire passer un vecteur d'éffacement avec disons 45 ou 90° de retard sur le vecteur d'affichage, pour avoir l'effet de rémanence des scopes radars/sonars.
Que pense-tu de lier cases-map-tableau à pixels-map ?
Le tableau ne serait rempli qu'une fois au départ. Et ne serait lu que partiellement: 200 x 200 ( et pas obligé d'afficher sur le scope avec 1pxl de résolution on peut facilement diviser par trois, en utilisant des set-points .
Et meme faire une zone d'exclusion autour du Soum du genre: trop prés, c'est crashé. ça économiserait du temps de calcul ) Cela parait jouable.

Au niveau conversion, ça avance (sans l'aide des matheux, mais ils me donnent à réfléchir, ça aide aussi...)
J'ai merdoyé un moment à cause de l'angle du min/max de l'angle de barre.
Pour avoir le plein effet, il faut la pleine echelle: 270°---> 0° <--- 90°.
Hé oui! La simulation, c'est avant tout: une grosse arnaque vis à vis de l'utilisateur.

La formule est encore incomplète et corrompue, mais y'a de l'espoir.
A gauche: Tout va bien, ça tourne, et fait demi-tour si la barre est maintenue.
A droite: ça merde; sans doute à cause du deuxième membre manquant dans l'équation des y.
En marche arrière: Y'a soucis (inversion par rapport à "l'attendu")
Je pense qu'il faut doubler l'équation en interpolant. ( j'ai mis les matheux sur les bons rails, s'ils ne piccolent pas trop pour les fêtes

Je modifie le zip.
Il reste à gérer la conservation du mouvement. Mais je vois à peu prés comment faire.

....Bonnes fêtes!...Et foin de la modération...

Edité par Roland Le 30/12/2012 à 14h58
____________________
Roro
Roro
Pour Chris: Tu a aussi ça: demo.zip
C'est le meme tableau que celui des matrices, que j'ai modifié pour y faire des essais de lecture et réarrangement.
Mais méfiance: Claudevdw a sa propre conception du traitement des abcisses et des ordonnées.
Hey!.....Bonne fêtes de nouvel an.
Edité par Roland Le 30/12/2012 à 15h56
C'est le meme tableau que celui des matrices, que j'ai modifié pour y faire des essais de lecture et réarrangement.
Mais méfiance: Claudevdw a sa propre conception du traitement des abcisses et des ordonnées.
Hey!.....Bonne fêtes de nouvel an.

Edité par Roland Le 30/12/2012 à 15h56
____________________
Roro
Roro
Cassiope, je bricole ton "map éditor" pour qu'il bosse les pixels un par un, et plus par paquets de soixante quatre.
Comme j'ai du conserver tes paramètres pour pas planter d'entrée, ça tient beaucoup moins de place à l'écran.
Comme j'ai du conserver tes paramètres pour pas planter d'entrée, ça tient beaucoup moins de place à l'écran.

____________________
Roro
Roro
Eeeh ben ! 336000 pixels à colorier 1 par 1 !!!
J'espère juste que t'as pensé à sauvegarder le map.txt d'origine
@+
Edité par cassiope01 Le 30/12/2012 à 19h23
J'espère juste que t'as pensé à sauvegarder le map.txt d'origine

@+
Edité par cassiope01 Le 30/12/2012 à 19h23
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."
Web
j'en suis pas encore à: "Save". Peut-etre ....Courant ...2014.
Et pi, t'inquiète, ton map.txt, je doit bien l'avoir en six exemplaires.
Nan, mais pour coloriser, je vais prendre un gros pinceau.
336000 ! Tu dis ?.... Purée! c'est beaucoup.
Si je fais 300 x 200, ça fait une jolie petite carte à 60 000.
Mais je garde comme elle est la "scale" des profondeurs qui est bien sympa.
Il y a aussi la solution du changement d'echelle entre la map "éditée" = map( x,y) à 60 000 et la map "affichée", qui garderait ses cotes actuelles.
PS: Les matheux sont en plein délire.
Et pi, t'inquiète, ton map.txt, je doit bien l'avoir en six exemplaires.
Nan, mais pour coloriser, je vais prendre un gros pinceau.
336000 ! Tu dis ?.... Purée! c'est beaucoup.

Si je fais 300 x 200, ça fait une jolie petite carte à 60 000.
Mais je garde comme elle est la "scale" des profondeurs qui est bien sympa.
Il y a aussi la solution du changement d'echelle entre la map "éditée" = map( x,y) à 60 000 et la map "affichée", qui garderait ses cotes actuelles.
PS: Les matheux sont en plein délire.

____________________
Roro
Roro
Ca y'est ! La solution, et c'est facile:
-- Créér une carte virtuelle dans laquelle on transfère la map en faisant:
Une case-map = un pixel carte-virtuelle.
-- Lire la carte virtuelle dans le scope sonar.
Mais comme la map en pixels est trop petite pour le sonar,
-- Agrandir la map et l'afficher dans une graphics avec ascenceurs.
Moouah. Que je suis bon, je vais agrandir les passages de portes. Pour la tête!
-- Créér une carte virtuelle dans laquelle on transfère la map en faisant:
Une case-map = un pixel carte-virtuelle.
-- Lire la carte virtuelle dans le scope sonar.
Mais comme la map en pixels est trop petite pour le sonar,
-- Agrandir la map et l'afficher dans une graphics avec ascenceurs.
Moouah. Que je suis bon, je vais agrandir les passages de portes. Pour la tête!
____________________
Roro
Roro
Bonjour!
Bon j'ai pris un peu de temps pour résoudre le problème et c'est fait. Pour le principe mathématique c'est réglé (ce n'était pas un gros problème). Il ne me reste plus qu'à pondre les lignes de code pour le réaliser.
Ça, ça va prendre un peu plus de temps, surtout que je vais m'absenter de la maison plusieurs jours pour fêter le jour de l'an chez de la famille à moi.
Je vous souhaite à tous une bonne année. Ne picolez pas trop...
Bon j'ai pris un peu de temps pour résoudre le problème et c'est fait. Pour le principe mathématique c'est réglé (ce n'était pas un gros problème). Il ne me reste plus qu'à pondre les lignes de code pour le réaliser.
Ça, ça va prendre un peu plus de temps, surtout que je vais m'absenter de la maison plusieurs jours pour fêter le jour de l'an chez de la famille à moi.
Je vous souhaite à tous une bonne année. Ne picolez pas trop...

Salut Chris,
de mon coté, en considérant dorénavant qu'une case de la MAP correspond à 100m, si tu sais me donner la distance des obstacles que le soum a tout autour de lui (tout les 7.5°), en commançant par devant lui suivant son cap actuel et sa profondeur, la représentation radar est résolue, comme tu peux le voir avec le code que j'ai donné plus haut.
Trouver la formules qui va bien pour incrémenter la position du soum sur la carte (dsrvX,dsrvY) qui est sûrement la donnée la plus essentielle du programme, ne va pas être simple non plus
Je te souhaite d'excellentes fêtes de fin d'années, et à l'année prochaine Chris
@+
Edité par cassiope01 Le 31/12/2012 à 10h54
de mon coté, en considérant dorénavant qu'une case de la MAP correspond à 100m, si tu sais me donner la distance des obstacles que le soum a tout autour de lui (tout les 7.5°), en commançant par devant lui suivant son cap actuel et sa profondeur, la représentation radar est résolue, comme tu peux le voir avec le code que j'ai donné plus haut.
Trouver la formules qui va bien pour incrémenter la position du soum sur la carte (dsrvX,dsrvY) qui est sûrement la donnée la plus essentielle du programme, ne va pas être simple non plus

Je te souhaite d'excellentes fêtes de fin d'années, et à l'année prochaine Chris

@+
Edité par cassiope01 Le 31/12/2012 à 10h54
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."
Web
Salut les loulous,
C'est pratiquement bon pour l'évolution du Soum sur carte.
Si tu est curieux, va voir sur http://www.maths-forum.com/.
Rubrique: "Café mathématique". Topic: "Le bateau ivre".
Ah! ces matheux...Faut tout leur expliquer...
Consomme avec modération ! Parce que l'eau bue ..éclate .....
C'est pratiquement bon pour l'évolution du Soum sur carte.
Si tu est curieux, va voir sur http://www.maths-forum.com/.
Rubrique: "Café mathématique". Topic: "Le bateau ivre".
Ah! ces matheux...Faut tout leur expliquer...

Consomme avec modération ! Parce que l'eau bue ..éclate .....

____________________
Roro
Roro
Et ben ça y est, le Soum manoeuvre comme un chef.
Il fait demi-tour et tourne en rond qu'en la barre est maintenue, et garde le cap quand la barre reviens à zéro.
Il faut mettre un coeff de réduction sur l'effet de la barre. c'est un peu vif dans la réaction.
L'essayer c'est l'adopter ----> Enfer de Trigo.zip
Edité par Roland Le 01/01/2013 à 00h09
Il fait demi-tour et tourne en rond qu'en la barre est maintenue, et garde le cap quand la barre reviens à zéro.
Il faut mettre un coeff de réduction sur l'effet de la barre. c'est un peu vif dans la réaction.
L'essayer c'est l'adopter ----> Enfer de Trigo.zip
Edité par Roland Le 01/01/2013 à 00h09
____________________
Roro
Roro
• Index
1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie