Forum Liberty Basic France

Jeux » "Tentative" de Simulation de pilotage d'un sous-marin DSRV... DSRV = petit sous-marin de sauvetage en grande profondeur.
Le 22/12/2012 à 20h28

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2489
Reprise du message précédent

Cassiope, peut-tu me donner la portée horizontale de la sonde en pixels de carte
J'ai vu que c'était 500 et 1500m, mais vu les fonctions du bas où j'ai vu le mot "scale" je préfère demander.
Je pense pouvoir avancer la dessus, en feintant ( parce que la distance est fixe) ...Merci . ....0+.
................
Une idée pour le sonar:
Le rayon est de 100, ça fait un carré de 200 par 200.
Si on divise par 10, ça fait un tableau de 400 par 400, des cases se 10.
J'ai vu que les cases de la carte étaient de 8
Le tableau de la carte existe, donc si on transfère le contenu du tableau carte dans le tableau scope en fonction de l'avancement du SM . ( convers pol/cartesien) Ce qui peut se faire de façon optimisée à 5 ou 10° prés. Et pas forcément à chaque tour.
Il "suffit" alors, de faire une lecture tournante du tableau scope, et d'allumer les points en fonction de son contenu. indépendamment du balayage,mais synchrone avec lui.
Et on peut meme introduire une variable aléatoire, pour que ce ne soit pas toujours les memes pixels qui s'allument à chaque tour, à l'intérieur de la case 10x10
N'oublions pas que ce qu'on voit sur un scope, c'est trés loin d'etre une photo. Et que l'image n'est pas exactement la meme à chaque balayage ( propagation fluctuente)



Edité par Roland Le 23/12/2012 à 00h27
____________________
Roro

   
Le 23/12/2012 à 10h35

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Je ne comprend pas tout de ce que tu expliques Roland mais TOUT est dans mon code.

Code VB :
    '---------------------------------------------------------------------------------------
    ' Features of rescue submarine DSRV:
    '   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)
    '   7CV , 1 hélice pivotante (vertical +/-20° max, horizontal +/-30° max)
    '   autonomie max : 30h
    '   sonar obstacles (max range 8000 yards = 7.3152km)              <---- portée du sonar.
    '   depth sonde (range sonde bathymétrique) 0-5000 ft (1524m)
    '---------------------------------------------------------------------------------------


Comme je l'ai dis plus haut, la carte des profondeurs a une définition de 1km (8 pixel = 1km), je ne pouvais pas faire plus petit...!
Faudra que je me débrouille avec ça :siffle
On peut tricher avec TOUT pour peu que l'ensemble soit cohérant, utilisable et plutôt réaliste pour tenter de piloter le soum.

La FUNCTION scale() n'est la QUE pour convertir la valeur en pixels de déplacement des manches de commande à l'écran, en valeurs utilisables dans les calculs.
Par exemple pour la commande de profondeur (celle du haut), le manche peut être déplacé de 83 pixels vers le haut ou le bas : la fonction scale() renverra une valeur de +/- 20° qui est l'angle réel des "ailerons" de profondeur du sous-marin.
Pour la commande de direction c'est toujours 83 pixels droite/gauche mais scale() renverra +/- 30°.
Pour le moteur j'ai choisi une valeur de +/-100 mais c'est arbitraire, on peut facilement changer ça suivant la valeur la plus facile à intégrer pour le calcul de la vitesse du soum...!

@+



Edité par cassiope01 Le 23/12/2012 à 11h54
____________________
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    
Le 23/12/2012 à 12h46

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2489
Ok, bien reçu pour le rapport Km/pixels. Et là, y'a un problème:
Portée de la sonde=1550m (soit 8 pixels...) Or les cases de la map font 8 pixels => portée de la sonde=1 case map
.Ce n'est pas grave, ça se corrige avec des coeffs. C'est ce que j'ai fait pour afficher la sonde.
Cela implique que:
Soit l'échelle de la carte change, soit la portée de la sonde augmente.
L'idéal, pour moi, serait une portée de 1/8 , 1/10, ou 1/20ème de carte.

Les valeurs min/max des commandes n'ont pas grandes importances, car il faut obligatoirement leur appliquer des coeffs .

Ce qui compte, c'est la valeur finale. Par exemple: la vitesse de défilement de l'azimut en fonction de l'angle de barre et de la vitesse d'avancement.

Je l'ai fait, et j'ai du appliquer des coeffs pour que ça se rapproche de la réalité.
Coeffs, qui sont à ajuster plus finement...bien sûr...

Jette un oeil sur ça: Enfer de Trigo.zip
Je crois que je ne suis plus trés loin. ( fichier: "Tc " )
Je me suis inscrit sur un site où on peut poser des questions de maths.
Cette satanée conversion est la clé de voute de ton prog.
On va voir ce que ça donne.... ...à+.
En tous cas, c'est super, on va pouvoir "ronger" un moment.



Edité par Roland Le 23/12/2012 à 12h47
____________________
Roro

   
Le 23/12/2012 à 13h47

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Roland:
Ok, bien reçu pour le rapport Km/pixels. Et là, y'a un problème:
Portée de la sonde=1550m (soit 8 pixels...) Or les cases de la map font 8 pixels => portée de la sonde=1 case map


C'est pas du tout ça.

La carte a une définition de 1km. (8 pixels = 1km)
Le SONAR a une portée de 8 km. (8000 yards = 7.3152km) (mais on peut aussi tricher)
Donc le rayon du sonar doit scruter 8 cases de la MAP, devant le soum dans le sens de sa marche.
Et ce rayon est l'hypothénuse de l'angle que fait la "route" (azimut) actuelle du soum par rapport au nord, qui est toujours l'orientation de lecture de la MAP(x,y), comme posée sur la table de lecture des cartes.
Tout le défi consiste à déterminer les coordonnées x,y sur la MAP() de chacune de ces 8 ou 10 cases correspondantes à la trajectoire actuelle du soum puisqu'elles se trouvent devant lui dans le sens de sa marche...

@+



Edité par cassiope01 Le 23/12/2012 à 13h50
____________________
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    
Le 23/12/2012 à 15h42

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2489
Hey, je parle de la portée de la sonde: 1500m en H 500m en Vertic

Dans le bout que j'ai mis, j'ai donné à la sonde une portée de 50 cases-carte, soit: 400Km.
Scope sonde 220 pxl: pas de 5. 5x50=250 (moins les bouts)=200 pxl
Je te signale que j'ai vérifié la validité du truc en mettant un obstacle sur la carte, qui apparait clairement sur le scope sonde. ( ne le cherche pas, il n'est pas sur le bout puisque je l'ai mis sur MA carte.

Mais dis ! Tu as mis Rod sur le coup, sans meme prendre la précaution d'isoler ton problème de sprite.
Ce qui risque de se passer, c'est simple à deviner:
Il va nous griller. Que dis-je . Nous crâmer... Nous carboniser....
Ce bel os, Rod va se jeter dessus comme un morphale, et il n'en laissera pas une miette, nous n'aurons plus qu'à aller nous coucher.
____________________
Roro

   
Le 23/12/2012 à 23h43

Libertynaute Débutant

Groupe: Membre

Inscrit le: 04/06/2012
Messages: 23
Bonjour!
C'est un peu difficile pour moi d'être présent ici par ce que je n'ai pas de temps, mais j'aimerais bien comprendre sur quel type de conversion polaire/cartésien vous parlez (et éventuellement pourquoi vous en avez besoin). Dans tous les cas c'est assez simple...
Si vous êtes sur un plan à 2 dimensions (x et y) il n'y a qu'à effectuer 2 opérations pour convertir une coordonnée polaire en coordonnée cartésienne. Voir....

Si vous être dans un espace à 3 dimensions, faudrait savoir si vous êtes dans un référentiel sphérique ou cylindrique. Mais là encore , la conversion dans un référentiel cartésien (X,Y,Z) est très simple.
Dans tous les cas, faut faire attention car le logiciel traite les angles en radians et non en degrés (faut préalablement faire une conversion)..
____________________
ChRiS :)

Web    
Le 24/12/2012 à 10h59

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Salut chris, merci à toi.

Si tu lances ce code submarine_simulator.zip , et que tu cliques sur le bouton "MAP", tu comprendras vite le propos et ce qu'il reste à faire... ;)

- visualiser (en 2D) ce que le sous-marin a devant lui (portée 8km), strictement à la profondeur où il évolu actuellement, dans le sens de sa marche, dans l'écran du SONAR, et tout ça en lisant la MAP() qui est un simple tableau à 2 dimensions (100x50) contenant les profondeurs, et dont chaque case représente 1km².
- visualiser aussi ce qu'il y a sous lui toujours dans le sens de sa marche (disons 500m AV/AR et 1500m de profondeur)
- trouver les bons facteurs d'échelle pour que ce soit exploitable (pseudo-réaliste) par le pilote.
- faire les bon calculs pour que les affichages représentent du mieux possible les actions du pilote sur les commandes dont il dispose pour piloter.

Effectivement la conversion polaire/cartésien n'est pas le plus difficile, mais d'intégrer tout ça efficacement et proprement dans le code, sachant que le SONAR tournant oblige à TOUT intégrer dans la boucle... ça c'est un sacré défi... :nex

A mon humble avis, la quantité de calculs ralentira tellement cette boucle que la rotation du SONAR ne sera plus réaliste très longtemps :lol ( en fait, trop dépendant de la puissance de l'ordi sur lequel le programme sera lançé ! )

Joyeuses fêtes de fin d'année :top

@+



Edité par cassiope01 Le 24/12/2012 à 11h11
____________________
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    
Le 24/12/2012 à 11h06

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2489
Le problème est simple à décrire,
Imagine:
A gauche: Une fenetre représentant un poste de pilotage de bateau.
Deux commandes:
Le moteur, qui imprime au bateau une vitesse: +V ; -V ( en bananes flambées par secondes)
La barre, qui donne au gouvernail un angle par rapport à l'axe du bateau: +Téta ; -Téta
A Droite: Une autre fenetre, rectangulaire bleue (c'est la mer).Axes x,y (horizontal, vertical. Si on parle de la fenetre. Et Ouest/Est - Nord/ Sud. Si on parle de la mer )
A l'instant "T" zéro. le bateau est en xa,ya dans la fenetre de droite.
Connaissant: V et téta que seront xb et yb à l'instant "T"+ quelques secondes( ou quelques jours) ?
ou: xb,yb = xa,ya ((( f ))) de v,téta
Le facteur temps s'annulant dans les opérations, on doit pouvoir manger les bananes.
.......
Oups! légère erreur:
Pour que le temps s'annule ce n'est xb,yb . Mais delta x,delta y. qui sont fonction de V et téta.



Edité par Roland Le 24/12/2012 à 17h09
____________________
Roro

   
Le 24/12/2012 à 15h51

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2489
Cassiope, inutile de te casser le neurone sur le prog en C. Je l'ai regardé, il ne contient pas la formule magique.
Tout juste si il a mis un vague coeff de ralentissement de l'évolution verticale en fonction de l'angle de barre, qui d'ailleurs ne rime à rien.
Si tu veux bien me donner ton avis sur la clarté de l'énnoncé du problème . Dans mon dernier post.
Ca serait sympa....... à+.
____________________
Roro

   
Le 25/12/2012 à 15h30

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2489
Coucou! .....Meme pas mal aux cheveux! ;)
J'ai vu que tu était passé sur le site, alors pour illustrer mon idée de transfert de la carte dans le scope, voici un petit bidouillage.
Le tableau de transfert n'apparait qu'aprés un clic sur up/down ou sur Haut/Bas/Droite....
Je l'avais mis en dynamique avec le reste; avec 9x9 ça marchait. Avec 15x15 le prog ne répondait plus.
Afficher des nombres, ça coute cher!
Et il est possible que j'ai inversé le banc d'arguein avec la fosse du Japon. (le profond et le pas profond)

Code JB :
 
 
 
  ' Submarine DSRV Simulator...1 Km = 8 pxl: diam=2x7
 
    nomainwin
    WindowWidth = 900'600
    WindowHeight = 450
    UpperLeftX = int((DisplayWidth-WindowWidth) / 10)
    UpperLeftY = 10 'int((DisplayHeight-WindowHeight) / 12)
 
    dim info$(1,1)
    Fcolor$ = "brown"'darkgreen
 
    statictext #w.ma, "Map:", 10, 240, 25, 20
    BUTTON #w.map, "Open", [openMap], UL, 40, 240, 50, 20
    BUTTON #w.clo, "Close", [closeMap], UL, 95, 240, 50, 20
    BUTTON #w.ha, "haut", [haut], UL, 165,250, 40, 20
    BUTTON #w.ga, "gauche", [gauche], UL, 125, 275, 40, 20
    statictext #w.map, "Map", 175, 278, 25, 20
    BUTTON #w.dr, "droite", [droite], UL, 205, 275, 40, 20
    BUTTON #w.ba, "bas", [bas], UL, 165, 300, 40, 20
    statictext #w.ni, "niveau:", 255, 240, 35, 40
    textbox #w.niv, 295, 240, 40, 20
    BUTTON #w.u, "up", [up], UL, 340, 240, 30, 20
    BUTTON #w.d, "down", [down], UL, 375, 240, 40, 20
 
    graphicbox #w.sonar, 5, 20, 210, 210
    graphicbox #w.scope, 225, 20, 210, 210
    graphicbox #w.g, 440, 20, 440, 380
 
    open "    Scope" for window_nf as #w
    #w "trapclose [exit]"
 ' ------------------------------------------ init graphics -----------------------------------------
 
    #w.sonar "down ; fill ";Fcolor$
    #w.scope,"down ; fill ";Fcolor$
    '#w.scope "color 0 ";75+a*5
    #w.sonar "backcolor 0 80 0 ; home ; circlefilled 100"
    #w.sonar "flush ; discard"
    Print #w.g, "When leftButtonDown [ButtonLeftDown]"' a suprimer
    Print #w.g, "When leftButtonUown [ButtonLeftUp]"
    ' -------------------------------------------- init var. ------------------------------------
    #w.niv,"120"
    pi=3.1416
    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
    dim map(Xmax,Ymax) ' map
    dim scope(15,15)' transfert map de 25 à 50
    dsrvX = 30        ' current x pos Submarine
    dsrvY = 10        ' current y pos   "
    olddsrvX = dsrvX  ' old x pos Submarine
    olddsrvY = dsrvY  ' old y pos   "
    xa=dsrvX:ya=dsrvY
 
   '--------------------------------- Ouverture du prog -----------------------
    GOSUB [ReadMapFile]
 
 
    '----------------------------------------------------------------
 
 
 
   'wait
   #w.g "down ; fill ";"white"
   '-------------------------------------- DEBUT -------------------------
    [sonar]   ' called time loop
       ' 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 1 ; delsegment "; drawSegment - 1
            #w.sonar "home ; north ; turn ";r+a;" ; go 100 ; segment drawSegment"
        next
        #w.sonar, "flush ; discard"
        '-------------------------------- INIT SCOPE -------------------------
    sx=1:sy=1  '............transfert map-->scope
    xb=xa+14
    yb=ya+14
    if yb >Ymax-1 then yb=Ymax-1
    if xb >Xmax-1 then xb=Xmax-1
    for x=xa to xb
       for y=ya to yb
          scope(sx,sy)=map(x,y)
          sy=sy+1
       next y
       sy=1:sx=sx+1
    next x''''''''''''''''''''''''''''''''''''
 
        '---------------------------------------------------------------
        gosub [compute]   ' calculate all values
        gosub [DispDSRVpos]  ' on map if opened
            gosub [dispScope]
 
        timer 16, [sonar]
    wait
    [openTab]
    #w.g "color black" '.........Tableau verif
    xx=10:yy=20
    for x=1 to 14
       for y=1 to 14
          #w.g, "PLACE "; xx; " "; yy
          #w.g, "\"; scope(x,y)
          yy=yy+25
       next y
       yy=20
       xx=xx+30
    next x '''''''''''''''''''''''''''''''''
wait
   [haut]
     ya=ya-1:dsrvY=dsrvY-1
     if dsrvY < 1 then dsrvY=1
     if ya < 1 then ya=1
     goto [openTab]
   wait
   [gauche]
     xa=xa-1:dsrvX=dsrvX-1
     if dsrvX < 1 then dsrvX=1
     if xa < 1 then xa=1
     goto [openTab]
   wait
   [bas]
     ya=ya+1:dsrvY=dsrvY+1
     if dsrvY >Ymax-1 then dsrvY=Ymax-1
     if ya > Ymax-2 then ya =Ymax-2
     goto [openTab]
   wait
   [droite]
     xa=xa+1:dsrvX=dsrvX+1
     if dsrvX >Xmax-1 then dsrvX=Xmax-1
     if xa > Xmax-1 then xa=Xmax-1
     goto [openTab]
   wait
   [up]
     pro=pro-5
     #w.niv,str$(pro)
     goto [openTab]
   wait
   [down]
     pro=pro+5
     #w.niv,str$(pro)
     goto [openTab]
   wait
    '---------------------------------- SCOPE Display ------------------
    [dispScope]
    print #w.niv, "!contents? var$"
    pro = val(var$)
    #w.scope,"fill ";Fcolor$
    #w.scope "color green ; size 2"  'passe de 3 à 2 pour test
    for xsco=1 to 14
       for ysco=1 to 14
      ' scan
          prof=scope(xsco,ysco)
          if prof < pro then
             print #w.scope, "set ";xsco*20;" ";ysco*20
            ' print #w.scope, "set ";xsco*20+4;" ";ysco*20
            ' print #w.scope, "set ";xsco*20+4;" ";ysco*20+4
            ' print #w.scope, "set ";xsco*20;" ";ysco*20+4
            ' print #w.scope, "set ";xsco*20+8;" ";ysco*20
            ' print #w.scope, "set ";xsco*20;" ";ysco*20+8
          end if
       next ysco
    next xsco
    #w.scope, "flush ; discard"
    return
 
    [compute]     ' to simulate inertia, commands could be divided by 10 ?
 
    return
 
    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
    opmap=1
            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
    wait
 
    [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: opmap=0
        WindowWidth = 835   ' restore #w setup
        WindowHeight = 505
        UpperLeftX = int((DisplayWidth-WindowWidth) / 10)
        UpperLeftY = 10
    wait
 
    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 ButtonLeftUp handle$, xClick, yClick  'prise de cotes
        ' Print #w.g, "Place ";xClick;" ";yClick      'a suprimer
        ' Print #w.g, "\x=";xClick
        ' Print #w.g, "\y=";yClick
        ' End Sub
    [exit]
        timer 0
        if opmap=1 then close #map:opmap=0
        if mapDisp then close #map:opmap=0
        close #w
    end
 
 


c'est une autre histoire pour lire le tableau en partant du centre, et en tournant. :heink
Et encore plus raide pour éffacer derrière. :|
NOTE: Il doit bien exister des scopes à balayage vertical ou transversal. (les écrans à transfert de charges...)



Edité par Roland Le 30/12/2012 à 14h59
____________________
Roro

   
Le 25/12/2012 à 18h33

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
En tout cas tu t'amuses bien :top
____________________
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    
Le 25/12/2012 à 19h09

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2489
Quand on coupe un saucisson en rondelles, la surface exploitable augmente.
Tes codes, c'est pareil....
Sur le forum de maths, j'ai reçu la réponse de quelqu'un qui dit pouvoir m'aider, mais qui m'a demandé un schéma ?
Je lui ai fait un zouli dessin.
Si tu a l'esprit à la "net'promenade" Le nom c'est 'Forum de math". J'ai mis mon deuxième prénom Valentin03
c'est dans "Lycée" , conv polaire-cartésien.
Si tu y va, cherche avec "terroriste", ou à topic le plus vu. Ca bastonne pas mal. ;)



Edité par Roland Le 25/12/2012 à 19h09
____________________
Roro

   
Le 26/12/2012 à 00h37

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2489
J'ai saupoudré la sonde de sinus et cosinus. Elle affiche dans plusieurs azimuts, mais il y a des angles où il n'y a rien. :heink
Si tu veux que la sonde n'y voit que dans l'axe du Soum ( cahier des charges), il suffit de coupler avec l'azimut.
Mais ça serait mieux si elle était orientable. Pour cela, il faudrait ajouter un afficheur 3 digits et une mollette.
Je trouve tes afficheurs un peu gros, ça bouffe de la place.
Pour les angles où il n'y a rien, c'est possible que ça vienne des coeffs que j'ai mis un peu à l'arrache.

Il faudrait brancher les anglophonistes sur le changement de système de coordonnées.
Parce que du côté des matheux, c'est pas impossible qu'il y en aient qui confondent etre une grosse tête, et avoir la grosse tête........à+.
____________________
Roro

   
Le 26/12/2012 à 11h20

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Roland:
Je ne suis pas arrivé à reporter la position du SM sur la carte. :@ :( :\'(


Dans mon code la position du soum sur la carte c'est dsrvX et dsrvY et la routine [DispDSRVpos] se charge de l'afficher sur la carte...!
Tu fais évoluer dsrvX dsrvY dans la routine [compute] (c'est là que tous les calculs d'interraction entre les commandes du pilote et le soum sont prévus) et tu verras le point rouge bouger sur la carte, plus simple que ça je vois pas !

Attention : dsrvX et dsrvY ne sont pas en pixel mais en coordonnées x,y dans MAP().
J'ai dit que la MAP faisait 100km sur 50km donc 8 pixels = 1 km, mais rien n'empêche de décider d'une autre échelle, par exemple une case de la MAP() = 100m x 100m, ce qui réduira l'aire de jeu à 10km x 5km, mais comme le soum mesure 15m ça peut être pas mal. A cette échelle, dsrvX et dsrvY ne bougeront que si le soum a parcouru au moins 100m...!

@+



Edité par cassiope01 Le 26/12/2012 à 11h37
____________________
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    
Le 26/12/2012 à 13h27

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2489
Oui, j'ai du me planter quelque part. Car j'ai fais avec: dsrvX et dsrvY, et le soum montait en y au lieu de descendre.
Note: je ne mets pas à [compute]. Parce que à compute, c'est le déplacement en fonction de: Vitesse/Angle de barre.(Polaire/Cartésien), et que dans mon bidouillage, je déplace en cartésien (Haut/Bas/Droite/Gauche)
Ce que fait aussi le gars dans le prog en: C (Avant/arrière/Haut/bas)
Si tu veux faire fonctionner le scope du sonar, il y a la solution de changer l'echelle de la carte.
Et de faire une carte plus grande en l'affichant dans une fenêtre avec ascenseurs ( si c'est possible ?)

J'essaie de réduire les afficheurs ! ? % § ..&..@ 3 # ^^ ! ....@+.



Edité par Roland Le 26/12/2012 à 13h42
____________________
Roro

   
Le 26/12/2012 à 13h38

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2489
Y'a moyen d'ajouter un afficheur 3 digit et une mollette, en poussant les sliders sur la droite, et en agrandissant un chouia la fenêtre.
Je le tente dans un module séparé, car je n'ai pas l'abilitation pour toucher à: [displayValue] ( il faut disposer des droits:administrateur "extraterrestre".)
____________________
Roro

   
Le 26/12/2012 à 19h30

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2489
Léger emmélage de pinceaux......Le dernier message a été détruit par une attaque d'extraterrestres. :s
J'ai corrigé le bidouillage. Le Soum est comme un poisson dans l'eau.





Edité par Roland Le 26/12/2012 à 22h33
____________________
Roro

   
Le 27/12/2012 à 20h06

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2489
Deux problèmes:
1)- JB, s'il donne l'heure, n'indique pas le nord ! :(
Si tu veux afficher le "cap"; il faudra poser un dipole sur le Soum, et tester la position de poles. (si les sprites, chez moi, n'étaient des insoumis je tenterais la chose.)
2)- La vitesse minimale du Soum est soumise au Timer. :s
En effet, quelque coeff que l'on puisse appliquer, à quelque endroit que ce soit, la valeur finale du déplacement ne peut etre inférieure à: 1. :(
1 pxl toutes les 20ms =50 pxls/sec... 50pxls/8 = 6,25 Km/sec... :|
Ce qui fait beaucoup pour un Sous-marin.
J'ai donc réduit le déplacement à 1pxl tous les 10 cycles.
Démo: Enfer de Trigo.zip
La bête tourne gentiment, mais ne maintiens pas le cap quand la barre est remise à zéro. Y'a encore du boulot.

M'est avis que tu nous a levé un sacré lièvre avec ton DSRV. :top



Edité par Roland Le 28/12/2012 à 00h42
____________________
Roro

   
Le 28/12/2012 à 16h07

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2489
Pas besoin d'aller chercher de la 3D... Ta carte, elle est trés bien, et facile à exploiter. :top
Il faut juste changer l'echelle, et éventuellement l'agrandir ( si elle peut etre affichée dans une fenetre à ascenceurs). :miam



Edité par Roland Le 28/12/2012 à 16h08
____________________
Roro

   
Le 29/12/2012 à 03h17

Libertynaute Débutant

Groupe: Membre

Inscrit le: 04/06/2012
Messages: 23
Bonjour! Encore une tempête de neige et 50cm de plus...
Dur, dur le temps des fêtes!
Après lecture de " submarine_simulator" et vu ta base de données, je pense avoir compris sur quoi vous vous cassez les dents.
Sur le sonar tu veux voir le profil de ce qu'il y a devant pour une direction et une profondeur donnée. Doit-on aussi tenir compte de son inclinaison actuelle??? (là ce serait plus coton!!!) Faudrait probablement aussi définir un "angle de vision" pour le radar devant soi.
J'ai un peu mal aux cheveux mais je vais méditer ça ces jours-ci.
En tout cas pour le code...chapeau. Ya des passages où pour moi c'est du latin.
Bonne Année à tous
ChRiS
____________________
ChRiS :)

Web    
Le 29/12/2012 à 08h01

Libertynaute Débutant

Groupe: Membre

Inscrit le: 04/06/2012
Messages: 23
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??? :heink
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..


____________________
ChRiS :)

Web    
Jeux » "Tentative" de Simulation de pilotage d'un sous-marin DSRV... DSRV = petit sous-marin de sauvetage en grande profondeur.  

 |  |

1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie