Forum Liberty Basic France
• Index
Reprise du message précédent
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
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
____________________
Roro
Roro
Salut, et meilleurs voeux pour 2013.
Cassiope, dans ton "Sonar" dernière version,aprés avoir longtemps cherché d'où sortait gX et gY, j'ai fini par comprendre qu'ils étaient générés par: posxy. Reprend moi si je me gourre.
Esit-il possible de mettreau milieu au bon endroit; une boucle qui parcourrait le vecteur du point 0
à son extrémité avec ce posxy qui renverrait à chaque cycle (de la boucle) la position du point de lecture ?
PS: A-tu remarqué que dans ma dernière version de "enfer de trigo" le cap était affiché ?
Et ce, sans etre obligé de fixer un dipole à la coque du Soum (Economie de soudures)......à+.
Cassiope, dans ton "Sonar" dernière version,aprés avoir longtemps cherché d'où sortait gX et gY, j'ai fini par comprendre qu'ils étaient générés par: posxy. Reprend moi si je me gourre.
Esit-il possible de mettre
à son extrémité avec ce posxy qui renverrait à chaque cycle (de la boucle) la position du point de lecture ?
PS: A-tu remarqué que dans ma dernière version de "enfer de trigo" le cap était affiché ?
Et ce, sans etre obligé de fixer un dipole à la coque du Soum (Economie de soudures)......à+.
____________________
Roro
Roro
Roland:
Non non, tu ne te gourres pas. "posxy" donne la position courante dans la fenêtre graphique concernée.
Roland:
J'ai rien compris
Il faudrait juste lancer tout les 7.5° comme le propose Chris, une routine qui "lit" sur la MAP() la distance d'un obstacle devant le soum à sa profondeur, et renvoi une valeur entre 0 et 100. (101 = pas d'obstacle)
Pour le moment c'est juste un RND qui produit une valeur entre 65 et 95.
Roland:
Oui.
Ton code m'a surtout rappelé que dans le mien dsrvX,dsrvY ne sont pas des coordonnées en pixel, mais en n° de case dans la MAP()
@+
Cassiope, dans ton "Sonar" dernière version,aprés avoir longtemps cherché d'où sortait gX et gY, j'ai fini par comprendre qu'ils étaient générés par: posxy. Reprend moi si je me gourre.
Non non, tu ne te gourres pas. "posxy" donne la position courante dans la fenêtre graphique concernée.
Roland:
Esit-il possible de mettre au milieu au bon endroit; une boucle qui parcourrait le vecteur du point 0
à son extrémité avec ce posxy qui renverrait à chaque cycle (de la boucle) la position du point de lecture ?
à son extrémité avec ce posxy qui renverrait à chaque cycle (de la boucle) la position du point de lecture ?
J'ai rien compris

Il faudrait juste lancer tout les 7.5° comme le propose Chris, une routine qui "lit" sur la MAP() la distance d'un obstacle devant le soum à sa profondeur, et renvoi une valeur entre 0 et 100. (101 = pas d'obstacle)
Pour le moment c'est juste un RND qui produit une valeur entre 65 et 95.
Roland:
PS: A-tu remarqué que dans ma dernière version de "enfer de trigo" le cap était affiché ?
Et ce, sans etre obligé de fixer un dipole à la coque du Soum (Economie de soudures)......à+.
Et ce, sans etre obligé de fixer un dipole à la coque du Soum (Economie de soudures)......à+.
Oui.
Ton code m'a surtout rappelé que dans le mien dsrvX,dsrvY ne sont pas des coordonnées en pixel, mais en n° de case dans la MAP()

@+
____________________
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
Citation:
Dans la boucle ??? de rotation de "ton vecteur" (qui a l'air d'etre virtuel), celui qui teste à la distance aléatoire.
Au début de cette boucle, et à l'intérieur de celle ci.
il s'agirait de mettre une boucle dans laquelle on déplacerait le "pen" en position "up".
comme la ligne existante et "sa distance aléatoire "la distance variant de zéro à l'extrémité (100)
posxy, qui serait dans la meme instruction nous ramenerait la position du "pen".
Ce la constituerait une lecture vectoriele.
Je suis sur le changement d'echelle et l'agrandissement de la carte.
Si tu regarde ce que j'ai fait, tu va voir que le pinceau est trop GROS !
Code JB :
Edité par Roland Le 02/01/2013 à 18h39
J'ai rien compris
Dans la boucle ??? de rotation de "ton vecteur" (qui a l'air d'etre virtuel), celui qui teste à la distance aléatoire.
Au début de cette boucle, et à l'intérieur de celle ci.
il s'agirait de mettre une boucle dans laquelle on déplacerait le "pen" en position "up".
comme la ligne existante et "sa distance aléatoire "la distance variant de zéro à l'extrémité (100)
posxy, qui serait dans la meme instruction nous ramenerait la position du "pen".
Ce la constituerait une lecture vectoriele.
Je suis sur le changement d'echelle et l'agrandissement de la carte.
Si tu regarde ce que j'ai fait, tu va voir que le pinceau est trop GROS !

Code JB :
nomainwin WindowWidth = 400 WindowHeight = 400 UpperLeftX = (DisplayWidth-WindowWidth) / 2 UpperLeftY = (DisplayHeight-WindowHeight) / 1.5 GLOBAL Gwidth, Gheight, dc, Xmax, Ymax, deep, filename$ GLOBAL opgrad, opmp DIM info$(1,1) textbox #w.a, 40, WindowHeight-55, 40, 20 textbox #w.b, 90, WindowHeight-55, 40, 20 textbox #w.c, 140, WindowHeight-55, 40, 20 textbox #w.d, 190, WindowHeight-55, 40, 20 textbox #w.e, 240, WindowHeight-55, 40, 20 'statictext #w.infos, "", 40, WindowHeight-55, 40, 20 'BUTTON #w.sav, "Save", SaveMap, UL, 5, WindowHeight-55, 30, 20 ' graphicbox #w.grad, 4,4, WindowWidth-14, 50 graphicbox #w.map, 4, 55, WindowWidth-14, 280 open " Map 20 x 20 editor..." for window_nf as #w opmp=1 #w "trapclose quit" #w.map "down ; home ; posxy CenterX CenterY" Gwidth = CenterX * 2 Gheight = (CenterY * 2) filename$ = "map.txt" dc = 8 ' a cell in pixel Xmax = 100 ' int(Gwidth-1) Ymax = 50 ' int(Gheight-1) Xg = 250 ' nb of graduation for delph (0 to 2500m) DIM map(Xmax+1,Ymax+1) deep = 1 for y = 0 to Ymax ' init all map() to 10m for x = 0 to Xmax :map(x,y) = deep :next next #w.map "fill 0 254 255" #w.a,str$(int(Gwidth-1))''§§§§§§§§§§§§§§§§§§§§§§§§§§§§ 'wait 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)) Dcolor$ = "0 ";255-map(x,y);" 255" if map(x,y) = 0 then Dcolor$ = "253 238 153" #w.map "set ";x;" ";y;" ; backcolor ";Dcolor$;" ; color ";Dcolor$ next next close #grid end if '--------------------------------- GRAD Scale Deep ------------------------- WindowWidth = 824 WindowHeight = 130 UpperLeftX = 100 ' (DisplayWidth-WindowWidth) / 4 UpperLeftY = 100 ' (DisplayHeight-WindowHeight) / 4 graphicbox #s.grad, 4,4, 810, 50 statictext #s.infos, "", 40, 65, WindowWidth-150, 20 BUTTON #s.sav, "SaveMap", SaveMap, UL, WindowWidth-100, 62 , 80, 30 open " Deep Scale" for window_nf as #s opgrad=1 ' flag d'ouverture #s #s "trapclose quit" #s.grad "down ; fill black" #s.sav "!font Arial 10 bold" #s.infos "!font courrier_new 12 bold" widthgrad=810 ' pour pas mélanger avec "Gwidth" de la map deep = 1 Xg = 250 ' nb of graduation for delph (0 to 2500m) dc = 8 ' a cell in pixel for y = 0 to Ymax ' init all map() to 10m for x = 0 to Xmax :map(x,y) = deep :next next for c = 1 to Xg #s.grad "backcolor black ; color yellow " if c=1 or c mod 10 = 0 or c=Xg then #s.grad "place ";5+(c-1)*int((widthgrad-20)/Xg);" 15;|";c #s.grad "color black" #s.grad "place ";10+(c-1)*int((widthgrad-20)/Xg);" 25" #s.grad "backcolor 0 ";255-c;" 255 ; boxfilled ";12+c*int((widthgrad-20)/Xg);" ";25+20 next #s.grad "backcolor black ; color yellow ; place ";widthgrad-40;" 40 ;|x10 m" #s.grad "backcolor 253 238 153 ; place 0 26 ; boxfilled 10 44" #s.grad "flush ; discard" #s.grad "when leftButtonDown [deep]" #s.grad "when characterInput [arrows]" #w.map "when characterInput [arrows]" #w.map "when leftButtonMove [mark]" #w.map "when mouseMove [XY]" goto [arrows] [infos] #s.infos "Deep set : ";deep*10;" m";space$(12);" on map : ";map(cx,cy);space$(35);"case = ";cx;" km , ";cy;" km " return [mark] cx = int(MouseX/dc) cy = int(MouseY/dc) if cx<0 then cx=0 if cx>Xmax then cx=Xmax if cy<0 then cy=0 if cy>Ymax then cy=Ymax Dcolor$ = "0 ";255-deep;" 255" if deep = 0 then Dcolor$ = "253 238 153" #w.map "place ";cx*dc;" ";cy*dc;" ; backcolor ";Dcolor$;" ; color ";Dcolor$;" ; boxfilled ";cx*dc+dc;" ";cy*dc+dc #w.map "flush ; discard" map(cx,cy) = deep gosub [infos] wait [arrows] k$ = right$(Inkey$,1) select case k$ case chr$(_VK_RIGHT) :deep = deep + 1 : if deep>Xg then deep = Xg case chr$(_VK_LEFT) :deep = deep - 1 : if deep<0 then deep = 0 end select xD = 10+(deep-1)*int((widthgrad-20)/Xg) #s.grad "color black ; place ";oldxD;" 23 ; box ";oldxD+int((widthgrad-20)/Xg)+1;" ";26+20 oldxD = xD #s.grad "color yellow ; place ";xD;" 23 ; box ";xD+int((widthgrad-20)/Xg)+1;" ";26+20 gosub [infos] #w.map "setfocus" wait [deep] deep = int((MouseX-10)/int((WindowWidth-30)/Xg)) if deep<0 then deep=0 xD = 10+(deep-1)*int((widthgrad-20)/Xg) #s.grad "color black ; place ";oldxD;" 23 ; box ";oldxD+int((widthgrad-20)/Xg)+1;" ";26+20 oldxD = xD #s.grad "color yellow ; place ";xD;" 23 ; box ";xD+int((widthgrad-20)/Xg)+1;" ";26+20 gosub [infos] wait [XY] cx = int(MouseX/dc) cy = int(MouseY/dc) gosub [infos] wait sub SaveMap hdle$ open filename$ for output as #grid for y = 0 to Ymax caseLine$ = "" for x = 0 to Xmax caseLine$ = caseLine$;map(x,y);" " next #grid, caseLine$ next close #grid end sub sub pause temp 'pause en millisecondes timer temp, [temps] wait [temps] timer 0 end sub 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 sub quit handle$ if opgrad=1 then close #s:opgrad=0 if opmp=1 then close #w:opmp=0 ' close #handle$ 'call SaveMap "#w.map" END end sub
Edité par Roland Le 02/01/2013 à 18h39
____________________
Roro
Roro
Je ne sais pas trop ce que tu veux faire, mais si c'est juste donner une plus grande définition à la MAP, il te suffit de donner une valeur plus petite à "dc" (dc=4 par exemple doublera la quantité de données de la MAP), et surtout de donner un autre nom que "map.txt" à filename$ dans le code Map_Edit.bas qui dans ce ZIP : submarine_simulator.zip .
Mais ça risque d'être très long à dessiner tout ça...
@+
Edité par cassiope01 Le 03/01/2013 à 15h20
Mais ça risque d'être très long à dessiner tout ça...

@+
Edité par cassiope01 Le 03/01/2013 à 15h20
____________________
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
Non, le but c'est de faire directement la lecture vectorielle du tableau, sans aucun calculs.
Ta ligne qui contient le fameux posxy, et qui teste à la distance aléatoire; au lieu de fixer cette distance tu la fait varier de 1,à 99 dans une boucle, le test se faisant sur le tableau. avec: case=pixel
Evidemment, il y a le problème de la dim du tableau (100,50) ce qui me fait dire qu'il faut: soit agrandir la carte, soit changer l'échelle, soit diminuer la portée du sonar.
A part ça:
Tu a mesuré le temps de cycle, ?.. Pour avoir mis 16ms.
J'ai ajouté quelques fonctionalités:
Affichage de l'azimut et bmpbuttons de défilement pour la sonde.
Affichage de la distance verticale entre le Soum et le fond
avec digits plus petits
et quelques calculs.
le temps de cycle est passé à 31ms.
Je pense qu'on peut délester des trucs:
Les ballasts, une fois réglés, pourraient n'etres rafraichis, qu'à l'occasion d'un changement d'état.
Les boutons: carte, ballast, egaliseur; pourraient etres des bmpbutton
qui pourraient etres retirés du cycle.
Les deux affichages que j'ai ajoutés étant dans des modules séparés on peut ne les raffraichir que tous les N cycles.
De meme d'ailleurs que tous les afficheurs.
Parce que le pauvre jb ne va pas tarder à transpirer et à tirer la langue.
Qu'en pense l'ingénieur DCN ?
Edité par Roland Le 03/01/2013 à 18h41
Ta ligne qui contient le fameux posxy, et qui teste à la distance aléatoire; au lieu de fixer cette distance tu la fait varier de 1,à 99 dans une boucle, le test se faisant sur le tableau. avec: case=pixel
Evidemment, il y a le problème de la dim du tableau (100,50) ce qui me fait dire qu'il faut: soit agrandir la carte, soit changer l'échelle, soit diminuer la portée du sonar.
A part ça:
Tu a mesuré le temps de cycle, ?.. Pour avoir mis 16ms.
J'ai ajouté quelques fonctionalités:
Affichage de l'azimut et bmpbuttons de défilement pour la sonde.
Affichage de la distance verticale entre le Soum et le fond
avec digits plus petits
et quelques calculs.
le temps de cycle est passé à 31ms.
Je pense qu'on peut délester des trucs:
Les ballasts, une fois réglés, pourraient n'etres rafraichis, qu'à l'occasion d'un changement d'état.
Les boutons: carte, ballast, egaliseur; pourraient etres des bmpbutton
qui pourraient etres retirés du cycle.
Les deux affichages que j'ai ajoutés étant dans des modules séparés on peut ne les raffraichir que tous les N cycles.
De meme d'ailleurs que tous les afficheurs.
Parce que le pauvre jb ne va pas tarder à transpirer et à tirer la langue.
Qu'en pense l'ingénieur DCN ?
Edité par Roland Le 03/01/2013 à 18h41
____________________
Roro
Roro
Roland:
16ms c'est juste une valeur évaluée "à l'oeil" pour une bonne fluidité de l'affichage sonar.
Roland:
C'est déjà la cas, puisque tout ça n'intervient QUE lorsque le joueur appui sur son bouton gauche de souris, exactement comme s'il cliquait sur un bmpbutton. C'est le rôle de #w.cmds "when leftButtonDown [command]".
Roland:
c'est ce que j'ai expliqué dès le début.
Tout ça est un peu trop "prise de tête" pour moi
Je vais attendre les calculs de Chris.
@+
Tu a mesuré le temps de cycle, ?.. Pour avoir mis 16ms.
16ms c'est juste une valeur évaluée "à l'oeil" pour une bonne fluidité de l'affichage sonar.
Roland:
Je pense qu'on peut délester des trucs:
Les ballasts, une fois réglés, pourraient n'etres rafraichis, qu'à l'occasion d'un changement d'état.
Les boutons: carte, ballast, egaliseur; pourraient etres des bmpbutton
qui pourraient etres retirés du cycle.
Les ballasts, une fois réglés, pourraient n'etres rafraichis, qu'à l'occasion d'un changement d'état.
Les boutons: carte, ballast, egaliseur; pourraient etres des bmpbutton
qui pourraient etres retirés du cycle.
C'est déjà la cas, puisque tout ça n'intervient QUE lorsque le joueur appui sur son bouton gauche de souris, exactement comme s'il cliquait sur un bmpbutton. C'est le rôle de #w.cmds "when leftButtonDown [command]".
Roland:
Parce que le pauvre jb ne va pas tarder à transpirer et à tirer la langue.
c'est ce que j'ai expliqué dès le début.
Tout ça est un peu trop "prise de tête" pour moi

Je vais attendre les calculs de Chris.
@+
____________________
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
Citation:
Et ben, t'a un sacré bon oeil, c'est pile poil le temps de cycle de ta première version.
J'ai meme crus m'etre planté dans ma procédure de mesure.
Mais non puisque le temps est passé à 31ms avec la meme procédure; et les trucs que j'ai ajoutés.
Citation:
Ah oui, en effet.
Hey ! tu ne va pas t'échapper aprés nous avoir mis cette "bombe amorcée" entre les pattes.
16ms c'est juste une valeur évaluée "à l'oeil"
Et ben, t'a un sacré bon oeil, c'est pile poil le temps de cycle de ta première version.
J'ai meme crus m'etre planté dans ma procédure de mesure.
Mais non puisque le temps est passé à 31ms avec la meme procédure; et les trucs que j'ai ajoutés.
Citation:
C'est déjà la cas, puisque tout ça n'intervient QUE lorsque le joueur appui sur son bouton gauche de souris, exactement comme s'il cliquait sur un bmpbutton. C'est le rôle de #w.cmds "when leftButtonDown [command]".
Ah oui, en effet.

Hey ! tu ne va pas t'échapper aprés nous avoir mis cette "bombe amorcée" entre les pattes.


____________________
Roro
Roro
Bonsoir tout le monde.
Suis de retour à la maison. Je vais mettre au travail pour le code dès demain matin pour le code pour le radar.
À plus tard
Suis de retour à la maison. Je vais mettre au travail pour le code dès demain matin pour le code pour le radar.
À plus tard
Je suis tombé sur un os. Pour vous ce n'est rien,mais moi je n'y arrive pas..(c'est de la prog.)
Je commence à faire des tests sur mon code (c'est pas mal avancé), mais je ne sais pas comment aller chercher l'information dans map.txt. Corrigez moi si je me trompe, mais les fichiers .txt sont vus par le système comme une "matrice" à 1 dimension.
Je fais comment, par exemple pour obtenir la profondeur au point (20,30) dans la map ????
Edité par chris Le 06/01/2013 à 05h56
Je commence à faire des tests sur mon code (c'est pas mal avancé), mais je ne sais pas comment aller chercher l'information dans map.txt. Corrigez moi si je me trompe, mais les fichiers .txt sont vus par le système comme une "matrice" à 1 dimension.
Je fais comment, par exemple pour obtenir la profondeur au point (20,30) dans la map ????
Edité par chris Le 06/01/2013 à 05h56
Tu écris donc un code en partant de la feuille blanche, sans t'appuyer sur mon code !
Pas de pb Chris, il te suffit d'y insérer les 2 routines de mon code qui s'occupent de remplir la variable tableau à 2 dimensions map(x,y) avec le contenu du fichier map.txt .
Ne pas oublier de déclarer avant sa dimension Xmax = 100, Ymax = 50.
En fait le fichier map.txt contient 50 lignes de 100 chiffres.
Il s'agit de [ReadMapFile] et la fonction fileExists(path$, filename$).
Code VB :
puis tu écris gosub [ReadMapFile] quelque part au début de ton code, et le tour est joué
J'espère qu'à mon tour je saurai insérer dans mon code les formules que tu développes dans le tien, et qui pourront me donner simplement la distance du premier obstacle devant le soum à sa profondeur et dans la direction qu'il suit...!
A bientôt Chris.
Edité par cassiope01 Le 06/01/2013 à 10h35

Pas de pb Chris, il te suffit d'y insérer les 2 routines de mon code qui s'occupent de remplir la variable tableau à 2 dimensions map(x,y) avec le contenu du fichier map.txt .
Ne pas oublier de déclarer avant sa dimension Xmax = 100, Ymax = 50.
En fait le fichier map.txt contient 50 lignes de 100 chiffres.
Il s'agit de [ReadMapFile] et la fonction fileExists(path$, filename$).
Code VB :
[ReadMapFile] filename$ = "map.txt" if fileExists(DefaultDir$, filename$) then ' vérifie l'existance du fichier map.txt open filename$ for input as #grid ' ouverture du fichier map.txt en lecture for y=0 to Ymax LINE INPUT #grid, grid$ ' pour chaque ligne du fichier map.txt for x=0 to Xmax : map(x,y)=val(word$(grid$,x+1)) : next ' rempli la variable tableau avec chaque chiffre de cette ligne next close #grid ' fermeture du fichier map.txt else notice "No file ";upper$(filename$) goto [exit] end if return 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] end
puis tu écris gosub [ReadMapFile] quelque part au début de ton code, et le tour est joué

J'espère qu'à mon tour je saurai insérer dans mon code les formules que tu développes dans le tien, et qui pourront me donner simplement la distance du premier obstacle devant le soum à sa profondeur et dans la direction qu'il suit...!
A bientôt Chris.
Edité par cassiope01 Le 06/01/2013 à 10h35
____________________
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, et la valeur de la profondeur de la case map(20,30), c'est tout simplement:
profondeur= map(20,30) ....fois 10 pour l'affichage (sous le contrôle de Cassiope) ....à+.
profondeur= map(20,30) ....fois 10 pour l'affichage (sous le contrôle de Cassiope) ....à+.
____________________
Roro
Roro
Bonjour!
Je ne suis pas arrivé à intégrer ta sous routine à mon programme, même en déclarant " DIM info$(1,1)", en déclarant Xmax et Ymax et en appelant ta sous routine en début de programme....
Le compilateur ne cesse de me dire que map a 1 seule dimension.
Bon, je vais faire un truc, je t'envoie mon travail (il fonctionne bien car je l'ai testé en me bricolant moi même une matrice à 2 dim "map": tout fonctionne parfaitement.)
Le résultat qui t'intéresse est une matrice "matr" de 7 par 48. Les données sont codées dans la matrice suivant la convention suivante:
la première donnée est stockée à matr(1,0) et la dernière à matr(7, 47) . le X donne la distance à partir de soum (de 1 à 7) et le Y donne le # du segment en postulant que le # 0 est à gauche.
Quand le contenu vaut 1 alors il y a un objet (le soum est plus profond que le fond de mer) et quand il vaut zéro c'est le contraire.
J'ai pensé que tu débuterais ton balayage radar en commençant par la gauche .
"Tout ça pour ça...."
Ça semble assez ridicule comme programme, mais j'ai réussi à optimiser tous les calculs pour faire le plus court possible.
Essaie voir ce que tu peux en tirer.... et donne moi des nouvelles.
Si tu es intéressé à obtenir une information (un nombre de mètres) qui sépare le soum d'un obstacle qui serait droit devant, je pourrais te bricoler ça facilement, laisse-le moi savoir.
ChRiS.
sonartest1.bas
Je ne suis pas arrivé à intégrer ta sous routine à mon programme, même en déclarant " DIM info$(1,1)", en déclarant Xmax et Ymax et en appelant ta sous routine en début de programme....
Le compilateur ne cesse de me dire que map a 1 seule dimension.
Bon, je vais faire un truc, je t'envoie mon travail (il fonctionne bien car je l'ai testé en me bricolant moi même une matrice à 2 dim "map": tout fonctionne parfaitement.)
Le résultat qui t'intéresse est une matrice "matr" de 7 par 48. Les données sont codées dans la matrice suivant la convention suivante:

la première donnée est stockée à matr(1,0) et la dernière à matr(7, 47) . le X donne la distance à partir de soum (de 1 à 7) et le Y donne le # du segment en postulant que le # 0 est à gauche.
Quand le contenu vaut 1 alors il y a un objet (le soum est plus profond que le fond de mer) et quand il vaut zéro c'est le contraire.
J'ai pensé que tu débuterais ton balayage radar en commençant par la gauche .
"Tout ça pour ça...."
Ça semble assez ridicule comme programme, mais j'ai réussi à optimiser tous les calculs pour faire le plus court possible.
Essaie voir ce que tu peux en tirer.... et donne moi des nouvelles.
Si tu es intéressé à obtenir une information (un nombre de mètres) qui sépare le soum d'un obstacle qui serait droit devant, je pourrais te bricoler ça facilement, laisse-le moi savoir.
ChRiS.
sonartest1.bas
Ah ah! Chris, tu fais comme moi, tu essaie de tordre le bras à jb.
ta ligne:
if map(posXXX(z),posYYY(z))<(value(2)/10) then
Tu la décompose, comme ça:
px=posXXX(z): py=posYYY(z)
if map(px,py)<(value(2)/10) then
Mais il faut que Cassiope intègre ton bout dans son code pour avoir la map( )
Je le fais aussi ,mais façon: "bourrin" (niveau affichage) ......à+.
ta ligne:
if map(posXXX(z),posYYY(z))<(value(2)/10) then
Tu la décompose, comme ça:
px=posXXX(z): py=posYYY(z)
if map(px,py)<(value(2)/10) then
Mais il faut que Cassiope intègre ton bout dans son code pour avoir la map( )
Je le fais aussi ,mais façon: "bourrin" (niveau affichage) ......à+.
____________________
Roro
Roro
Salut Chris,
chris:
Oups ! c'est ma faute. J'ai oublié de te dire de déclarer la variable tableau map(x,y) en écrivant dim map(Xmax,Ymax) après avoir implémenté Xmax et Ymax bien sûr...
Avec JB, si une variable tableau a plus de 10 éléments, il faut la déclarer. Elle est globale par défaut.
chris:
OUI OUI, je serais très très intéressé par ça, ou du moins une valeur de 0 à 100, 0 étant le soum et 100 étant la portée maxi du sonar...
Maintenant je vais zieuter ton code et tenter de le faire fonctionner avec MAP().
Roland:
Ca revient au même Roland, il n'y a pas de problème là.
@+
Edité par cassiope01 Le 07/01/2013 à 12h46
chris:
Bonjour!
Je ne suis pas arrivé à intégrer ta sous routine à mon programme, même en déclarant " DIM info$(1,1)", en déclarant Xmax et Ymax et en appelant ta sous routine en début de programme....
Le compilateur ne cesse de me dire que map a 1 seule dimension.
Je ne suis pas arrivé à intégrer ta sous routine à mon programme, même en déclarant " DIM info$(1,1)", en déclarant Xmax et Ymax et en appelant ta sous routine en début de programme....
Le compilateur ne cesse de me dire que map a 1 seule dimension.
Oups ! c'est ma faute. J'ai oublié de te dire de déclarer la variable tableau map(x,y) en écrivant dim map(Xmax,Ymax) après avoir implémenté Xmax et Ymax bien sûr...

Avec JB, si une variable tableau a plus de 10 éléments, il faut la déclarer. Elle est globale par défaut.
chris:
Si tu es intéressé à obtenir une information (un nombre de mètres) qui sépare le soum d'un obstacle qui serait droit devant, je pourrais te bricoler ça facilement, laisse-le moi savoir.
ChRiS.
ChRiS.
OUI OUI, je serais très très intéressé par ça, ou du moins une valeur de 0 à 100, 0 étant le soum et 100 étant la portée maxi du sonar...

Maintenant je vais zieuter ton code et tenter de le faire fonctionner avec MAP().
Roland:
Ah ah! Chris, tu fais comme moi, tu essaie de tordre le bras à jb.
ta ligne:
if map(posXXX(z),posYYY(z))<(value(2)/10) then
Tu la décompose, comme ça:
px=posXXX(z): py=posYYY(z)
if map(px,py)<(value(2)/10) then
ta ligne:
if map(posXXX(z),posYYY(z))<(value(2)/10) then
Tu la décompose, comme ça:
px=posXXX(z): py=posYYY(z)
if map(px,py)<(value(2)/10) then
Ca revient au même Roland, il n'y a pas de problème là.
@+
Edité par cassiope01 Le 07/01/2013 à 12h46
____________________
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
Chris, voici ce que donne ton code avec lecture de map.txt
Bien sûr il faut le lancer dans le répertoire qui contient le fichier map.txt !
Code VB :
Je pense que je n'aurai pas trop besoin de la matrice matr(7, 48) !!!
D'autre part, je ne sais pas trop quelle est la norme en trigonométrie, mais dans mon code je considère 0° en haut pour la rotation du sonar, ce qui devra en fait correspondre à l'avant du soum dans la direction qu'il suit...!
Mais je suppose que c'est juste une question de delta !
@+
Edité par cassiope01 Le 07/01/2013 à 13h51

Bien sûr il faut le lancer dans le répertoire qui contient le fichier map.txt !
Code VB :
' Définition des variables ' 'dsrvX et dsrvY : position actuelle du soum dans une map de 100 par 50 'value(1) :azimut, angle (direction de la trajectoire présente) du soum de 0 à 360° 'value(2) : profondeur du soum en mètres ' ' variables intermédiaires ' 'posX(z), ou z vaut de 1 à 7 : ' 'posY(z), ' coordonnées des 7 point de balayage autout de la position du soum pendant les calculs ' 'deltaX(z) ' 'deltaY(z) ' variation de la position X et Y des 7 points lors d'une rotation de (azimut + 7.5°*j) autour du point d'origine 'posXX et posYY : nouvelle position des points 'posXXX et posYYY : valeur absolue de la nouvelle position des points 'angle : c'est l'azimut converti en radians par la multiplication avec conv DIM info$(1,1) conv=0.017453292 'conversion degrés par radian value(1)= 90 'test avec valeurs value(2)=60 'test dsrvX=10 'test position du soum sur la map(x,y) dsrvY=10 ' Xmax=100 'dimension de la map(x,y) Ymax=50 ' DIM matr(7, 48) 'déclaration de la martice sonar DIM map(Xmax,Ymax) 'déclaration de la map gosub [ReadMapFile] ' lecture du fichier map.txt for z=1 to 7 ' posY(z)=dsrvY ' sert à définir 7 points (séparés d'une unité) à l'ouest de la position du soum posX(z)=dsrvX-z ' si celui-ci regarde vers le nord (dsrvX, dsrvY) pour un balayage circulaire de 360°. next z ' for j=0 to 47 'pour chacun des 48 segments balayés for z=1 to 7 angle = ((7.5*j)+value(1))*conv deltaX(z) = z-(z*cos(angle)) deltaY(z) = -1*z*sin(angle) '48 rotations successives de 7.5 degrés posXX(z) = posX(z)+deltaX(z) posYY(z) = posY(z)+deltaY(z) '...calcul des nouvelles 7 positions posXXX(z)= int(posXX(z)+0.5) posYYY(z)= int(posYY(z)+0.5) 'valeur abs et arrondi des coordonnées if posXXX(z)<0 then posXXX(z)=0 'test si le balayage déborde de la map en x if posYYY(z)<0 then posYYY(z)=0 'test si le balayage déborde de la map en y : dans les deux cas on place la coordonnée à zéro if map(posXXX(z),posYYY(z))<(value(2)/10) then 'comparaison de la prof du soum avec la prof des points matr(z, j)=1 else matr(z, j)=0 end if print matr(z, j); next z print next j wait [ReadMapFile] filename$ = "map.txt" if fileExists(DefaultDir$, filename$) then ' vérifie l'existance du fichier map.txt open filename$ for input as #grid ' ouverture du fichier map.txt en lecture for y=0 to Ymax LINE INPUT #grid, grid$ ' pour chaque ligne du fichier map.txt for x=0 to Xmax : map(x,y)=val(word$(grid$,x+1)) : next ' rempli la variable tableau avec chaque chiffre de cette ligne next close #grid ' fermeture du fichier map.txt else notice "No file ";upper$(filename$) goto [exit] end if return FUNCTION fileExists(path$, filename$) files path$, filename$, info$( fileExists = val(info$(0, 0)) END FUNCTION [exit] end
Je pense que je n'aurai pas trop besoin de la matrice matr(7, 48) !!!
D'autre part, je ne sais pas trop quelle est la norme en trigonométrie, mais dans mon code je considère 0° en haut pour la rotation du sonar, ce qui devra en fait correspondre à l'avant du soum dans la direction qu'il suit...!
Mais je suppose que c'est juste une question de delta !

@+
Edité par cassiope01 Le 07/01/2013 à 13h51
____________________
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
Ah mince! J'ai du déclarer le tableau machinalement, dans la même manip que la décomposition de la ligne,
et j'ai cru que c'était elle qui avait réglé le pb.
et j'ai cru que c'était elle qui avait réglé le pb.

____________________
Roro
Roro
Bonjour!
Si tu préfères commencer le balayage radar juste en avant du soum, plutot qu'à sa gauche, c'est simple, je n'ai qu'à faire une petite manip au code, tu n'as qu'à le dire.
Même chose si tu veux modifier d'autres paramètres .
D'autre part, je ne vois pas pourquoi tu dis que tu n'a pas besoin de la matrice matr(7, 48), c'est là que les informations sur l'environnement du sous sont stockées??
Si tu préfères commencer le balayage radar juste en avant du soum, plutot qu'à sa gauche, c'est simple, je n'ai qu'à faire une petite manip au code, tu n'as qu'à le dire.
Même chose si tu veux modifier d'autres paramètres .
D'autre part, je ne vois pas pourquoi tu dis que tu n'a pas besoin de la matrice matr(7, 48), c'est là que les informations sur l'environnement du sous sont stockées??
chris:
Oui, je préfère Chris
chris:
Parce que dans mon code, là où tu écris matr(z, j)=1 ou 0, moi je vais simplement marquer un point sur l'écran du sonar, à une distance calculée (?) entre posXXX(z),posYYY(z) et celle du soum, puis je sortirai immédiatement de la boucle de 7 pour poursuivre la boucle de 360° et ainsi de suite, tout les 7.5°.
Je n'ai pas besoin de stocker ces données : ce sera du "temps réel".
Enfin si j'ai tout bien compris il me semble que je devrais faire comme ça
@+
Edité par cassiope01 Le 07/01/2013 à 18h28
Bonjour!
Si tu préfères commencer le balayage radar juste en avant du soum, plutot qu'à sa gauche, c'est simple, je n'ai qu'à faire une petite manip au code, tu n'as qu'à le dire.
Si tu préfères commencer le balayage radar juste en avant du soum, plutot qu'à sa gauche, c'est simple, je n'ai qu'à faire une petite manip au code, tu n'as qu'à le dire.
Oui, je préfère Chris

chris:
D'autre part, je ne vois pas pourquoi tu dis que tu n'a pas besoin de la matrice matr(7, 48), c'est là que les informations sur l'environnement du sous sont stockées??
Parce que dans mon code, là où tu écris matr(z, j)=1 ou 0, moi je vais simplement marquer un point sur l'écran du sonar, à une distance calculée (?) entre posXXX(z),posYYY(z) et celle du soum, puis je sortirai immédiatement de la boucle de 7 pour poursuivre la boucle de 360° et ainsi de suite, tout les 7.5°.
Je n'ai pas besoin de stocker ces données : ce sera du "temps réel".
Enfin si j'ai tout bien compris il me semble que je devrais faire comme ça

@+
Edité par cassiope01 Le 07/01/2013 à 18h28
____________________
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
C'est ce que je disais.. Chris fait une lecture de matrice.
Mais pour faire la lecture du tableau, ça ne peut se faire qu'au moment de l'affichage, par une double boucle.
Une qui fait tourner le vecteur, et une qui le parcours.
Le probleme, c'est la procédure d'affichage, qui contient implicitement la procédure de lecture.
Que seul peut résoudre un maître des pixels, et qui n'est pas piquée des vers.
Mais tant qu'on aura pas touché à l'échelle carte, ou à la portée sonar.
On aura le même affichage que celui de " de mon scope de la page 2, sauf que l'affichage se fera en tournant, au lieu de ligne par ligne.
J'ai mis un size 3, qui devrait être box 8x8, pour être fidèle à la carte. La portée étant de 7 cases plus une au centre,pour éqilibrer 7..1..7
Il y aurait moyen de garder tout en l'état, en "lissant" les cases 8x8 entre elles à l'affichage.
Ce que j'ai essayé de faire avec des bmp 8x8 convexes et concaves.
Mai il faut une floppée de tests pour determiner la forme idoine au lissage.
je me repose de vos c.......ies
avec un petit prog de navigation: Evitement de baleine, femme à la dérive à sauver, et tempête de vents tournants; au programme.
Je le tiens au chaud pour pas perturber les affaires en cours.
Mais pour faire la lecture du tableau, ça ne peut se faire qu'au moment de l'affichage, par une double boucle.
Une qui fait tourner le vecteur, et une qui le parcours.
Le probleme, c'est la procédure d'affichage, qui contient implicitement la procédure de lecture.
Que seul peut résoudre un maître des pixels, et qui n'est pas piquée des vers.
Mais tant qu'on aura pas touché à l'échelle carte, ou à la portée sonar.
On aura le même affichage que celui de " de mon scope de la page 2, sauf que l'affichage se fera en tournant, au lieu de ligne par ligne.
J'ai mis un size 3, qui devrait être box 8x8, pour être fidèle à la carte. La portée étant de 7 cases plus une au centre,pour éqilibrer 7..1..7
Il y aurait moyen de garder tout en l'état, en "lissant" les cases 8x8 entre elles à l'affichage.
Ce que j'ai essayé de faire avec des bmp 8x8 convexes et concaves.
Mai il faut une floppée de tests pour determiner la forme idoine au lissage.
je me repose de vos c.......ies

Je le tiens au chaud pour pas perturber les affaires en cours.
____________________
Roro
Roro
Bonjour!
Pour débuter le balayage en avant du soum tu n'as qu'à remplacer les deux lignes (en début de programme):
for z=1 to 7 '
posY(z)=dsrvY ' sert à définir 7 points (séparés d'une unité) à l'ouest de la pos. du soum
posX(z)=dsrvX-z ' si celui-ci regarde vers le nord (dsrvX, dsrvY) pour un balayage circ. de 360°.
next z '
par:
for z=1 to 7 '
posX(z)=dsrvX ' sert à définir 7 points (séparés d'une unité) à en avant de la pos. du soum
posY(z)=dsrvY-z ' si celui-ci regarde vers le nord (dsrvX, dsrvY) pour un balayage circ. de 360°.
next z
Le codage le l'information de la matrice sera dorénavant:

Pour débuter le balayage en avant du soum tu n'as qu'à remplacer les deux lignes (en début de programme):
for z=1 to 7 '
posY(z)=dsrvY ' sert à définir 7 points (séparés d'une unité) à l'ouest de la pos. du soum
posX(z)=dsrvX-z ' si celui-ci regarde vers le nord (dsrvX, dsrvY) pour un balayage circ. de 360°.
next z '
par:
for z=1 to 7 '
posX(z)=dsrvX ' sert à définir 7 points (séparés d'une unité) à en avant de la pos. du soum
posY(z)=dsrvY-z ' si celui-ci regarde vers le nord (dsrvX, dsrvY) pour un balayage circ. de 360°.
next z
Le codage le l'information de la matrice sera dorénavant:

• 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