Bonjour,
J'utilise un logiciel de routage en navigation maritime. Ce logiciel n'est plus mis à jour mais est toujours fonctionnel.
Pour le faire fonctionner j'ai besoin de la polaire globale du bateau ( fichier qui indique la vitesse théorique du bateau en fonction d'un angle de vent - TWA = True Wind Angle - et d'une vitesse de vent - TWS = True Wind Speed -)

Un fichier "classique" à l'angle de vent en Degrés et la vitesse du vent en Noeud (1 noeuds : 1,852 km/h) en résulte la vitesse du bateau également en noeuds.
Je peux avoir ce fichier mais il me faut le convertir dans le formatage du logiciel.
À force de l'étudier, j'ai compris que l'auteur à utilisé les Km/h pour TWS donc ça pas de soucis il me suffit de diviser par 1,852 pour convertir le classique vers le formatage de l'auteur.

Je pensais qu'il en était de même pour les valeurs vitesse bateau mais non ça aurait été trop simple ...

J'ai donc décompiler le .jar et je me retrouve avec une quantité phénoménale de fichiers . java
Dans ces fichiers j'ai retrouvé celui qui me semble être la conversion d'un fichier csv "classique" en csv de l'auteur.

C'est celui ci :
Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.PrintStream;
import javax.swing.JOptionPane;
 
public class XXXDownloadPolaires
{
  static double[][] a = new double['È']['–'];
  static double[][] b = new double['È']['–'];
  static double[][] c = new double['È']['–'];
  static double[][] d = new double['È']['–'];
  static double[][] e = new double['È']['–'];
  static double[][] f = new double['È']['–'];
  static double[][][] g = new double[8]['È']['–'];
  static double[][][] h = new double[8]['È']['–'];
  static double[] i = new double['„'];
  static int[] j = new int['–'];
  static int[] k = new int['È'];
  static double l;
  static String[] m = { "1", "2", "4", "8", "16", "32", "64" };
  static int n = 0;
  static Boolean o = Boolean.valueOf(false);
  static int p = 0;
  static boolean q = false;
 
  public XXXDownloadPolaires()
  {
    System.out.println("debut programme load polaires");
    XXXIni localXXXIni = ClassMain.getIni();
    String str1 = localXXXIni.getVariable("AUTH", "ID_USER");
    String str2 = localXXXIni.getVariable("COURSES", "version vr");
    String str3 = localXXXIni.getVariable("COURSES", "COURSE1");
    String str4 = localXXXIni.getVariable("fichiers", "rep_polaire");
    String str5 = localXXXIni.getVariable("COURSES", "boat name");
    String str6 = localXXXIni.getVariable("COURSES", "boat type");
    System.out.println("repertoire de stockage des polaires " + str4);
    System.out.println("boat name " + str5);
    System.out.println("boat types " + str6);
    JOptionPane localJOptionPane1 = new JOptionPane();
    String str7 = "Telecharger les polaires pour le bateau " + str5 + " de type " + str6 + " ?";
    int i1 = JOptionPane.showConfirmDialog(null, str7, "Course VR", 0);
    System.out.println("Yes No = " + i1);
    if (i1 == 1) {
      return;
    }
    int i18;
    for (int i2 = 0; i2 < m.length; i2++)
    {
      o = Boolean.valueOf(false);
      String str8 = str4 + str5 + "_" + str6 + "_vpp_" + m[i2] + ".csv";
      String str9 = "http://UrlDuSite.com/vpp/" + str6 + "/" + str5 + "/vpp_1_" + m[i2] + ".csv";
      System.out.println("URL VR: " + str9);
      System.out.println("fichier de sortie: " + str8);
      try
      {
        DownloadPolarVr.getFile(str9, str8);
        n += 1;
        System.out.println(n);
        q = true;
      }
      catch (NullPointerException localNullPointerException)
      {
        System.out.print("Caught the NullPointerException");
        return;
      }
      int i6;
      for (int i4 = 0; i4 < 200; i4++) {
        for (i6 = 0; i6 < 150; i6++)
        {
          a[i4][i6] = 999.0D;
          e[i4][i6] = 999.0D;
        }
      }
      a[0][0] = 0.0D;
      for (i4 = 0; i4 < 200; i4++)
      {
        a[i4][1] = 0.0D;
        e[i4][1] = 0.0D;
      }
      for (i4 = 0; i4 < 150; i4++)
      {
        a[1][i4] = 0.0D;
        e[1][i4] = 0.0D;
      }
      for (i4 = 1; i4 <= 182; i4++)
      {
        a[i4][0] = (i4 - 1);
        e[i4][0] = (i4 - 1);
      }
      for (i4 = 0; i4 < 200; i4++) {
        for (i6 = 0; i6 < 150; i6++) {
          b[i4][i6] = 999.0D;
        }
      }
      b[0][0] = 0.0D;
      for (i4 = 0; i4 < 200; i4++) {
        b[i4][1] = 0.0D;
      }
      for (i4 = 0; i4 < 150; i4++) {
        b[1][i4] = 0.0D;
      }
      for (i4 = 1; i4 < 150; i4++) {
        b[0][i4] = ((i4 - 1) / 1.852D);
      }
      for (i4 = 1; i4 < 150; i4++) {
        a[0][i4] = (i4 - 1);
      }
      for (i4 = 1; i4 <= 182; i4++) {
        b[i4][0] = (i4 - 1);
      }
      for (i4 = 0; i4 < 132; i4++) {
        i[i4] = (i4 / 1.852D);
      }
      FileInputStream localFileInputStream = new FileInputStream(str8);
      InputStreamReader localInputStreamReader = new InputStreamReader(localFileInputStream);
      localObject = new BufferedReader(localInputStreamReader);
      i8 = 0;
      int i9 = 0;
      String str16;
      for (int i11 = 0; (str16 = ((BufferedReader)localObject).readLine()) != null; i11++)
      {
        i9++;
        int i14 = 0;
        int i16 = 1;
        String[] arrayOfString = str16.split(";");
        if (i11 == 0)
        {
          for (i18 = 1; i18 < arrayOfString.length; i18++) {
            j[i18] = Integer.parseInt(arrayOfString[i18]);
          }
          i8 = arrayOfString.length;
          l = j[(arrayOfString.length - 1)];
        }
        if (i11 > 1)
        {
          i18 = Integer.parseInt(arrayOfString[0]) + 1;
          k[i11] = i18;
          for (i14 = 2; i14 < i8; i14++)
          {
            i16 = j[i14] + 1;
            a[i18][i16] = Double.parseDouble(arrayOfString[i14]);
            if (a[i18][i16] > 0.0D) {
              o = Boolean.valueOf(true);
            }
          }
        }
      }
      if (!o.booleanValue()) {
        break;
      }
      p += 1;
      double d2 = 0.0D;
      int i20 = 2;
      for (int i21 = 1; i21 < 183; i21++) {
        if (i21 == k[i20])
        {
          i18 = 1;
          int i19 = 2;
          i20++;
          while (i18 < l)
          {
            for (int i17 = i18 + 1; a[i21][i17] == 999.0D; i17++) {}
            i19 = i17;
            d2 = i19 - i18;
            for (i22 = i18 + 1; i22 < i19; i22++)
            {
              double d3 = (a[i21][i19] - a[i21][i18]) / d2;
              a[i21][i22] = (a[i21][(i22 - 1)] + d3);
            }
            i18 = i19;
          }
        }
      }
      i21 = 1;
      int i22 = 2;
      d2 = 0.0D;
      int i24;
      while (i21 < 180)
      {
        for (i23 = i21 + 1; a[i23][2] == 999.0D; i23++) {}
        i22 = i23;
        d2 = i22 - i21;
        for (i24 = i21 + 1; i24 < i22; i24++) {
          for (int i25 = 1; i25 < 72; i25++)
          {
            double d5 = (a[i22][i25] - a[i21][i25]) / d2;
            a[i24][i25] = (a[(i24 - 1)][i25] + d5);
          }
        }
        i21 = i22;
      }
      int i28;
      for (int i23 = 1; i23 < 182; i23++) {
        for (i24 = 1; i24 < 131; i24++)
        {
          double d4 = i[i24];
          i28 = (int)Math.floor(d4);
          int i29 = i28 + 1;
          double d6 = a[i23][(i28 + 1)];
          double d7 = a[i23][(i29 + 1)];
          double d8 = d6 + (d7 - d6) * (d4 - i28) / (i29 - i28);
          b[i23][(i24 + 1)] = d8;
        }
      }
      for (i23 = 1; i23 < 182; i23++) {
        b[i23][0] = (i23 - 1);
      }
      for (i23 = 2; i23 < 132; i23++) {
        b[0][i23] = i[(i23 - 1)];
      }
      String str19 = str4 + str3 + "_vpp_interp_kmh_" + m[i2] + ".csv";
      FileWriter localFileWriter4 = new FileWriter(str19);
      for (int i26 = 0; i26 < 182; i26++)
      {
        String str20 = "";
        for (i28 = 0; i28 < 131; i28++) {
          if (i26 == 0) {
            str20 = str20 + a(b[i26][i28], 2) + ";";
          } else {
            str20 = str20 + a(b[i26][i28], 4) + ";";
          }
        }
        str20 = str20 + "\n";
        localFileWriter4.write(str20);
      }
      localFileWriter4.close();
      int i27;
      for (i26 = 0; i26 < 182; i26++) {
        for (i27 = 0; i27 < 72; i27++) {
          g[i2][i26][i27] = a[i26][i27];
        }
      }
      System.out.println("remplissage tableau total pour la voile " + i2);
      for (i26 = 0; i26 < 182; i26++) {
        for (i27 = 0; i27 < 132; i27++) {
          h[i2][i26][i27] = b[i26][i27];
        }
      }
    }
    for (i2 = 0; i2 < 200; i2++)
    {
      d[i2][0] = b[i2][0];
      f[i2][0] = b[i2][0];
    }
    for (i2 = 0; i2 < 132; i2++)
    {
      d[0][i2] = b[0][i2];
      f[0][i2] = b[0][i2];
    }
    double d1;
    for (int i3 = 1; i3 < 182; i3++) {
      for (int i5 = 1; i5 < 131; i5++)
      {
        d1 = 0.0D;
        for (int i7 = 0; i7 < p; i7++) {
          if (h[i7][i3][i5] > d1)
          {
            d1 = h[i7][i3][i5];
            d[i3][i5] = Double.parseDouble(m[i7]);
            f[i3][i5] = d1;
          }
        }
      }
    }
    for (i3 = 1; i3 < 132; i3++)
    {
      d[1][i3] = d[2][i3];
      f[1][i3] = 0.0D;
    }
    for (i3 = 1; i3 < 132; i3++) {
      d['µ'][i3] = d['´'][i3];
    }
    for (i3 = 1; i3 < 182; i3++)
    {
      d[i3][1] = d[i3][2];
      f[i3][1] = 0.0D;
    }
    String str10 = str4 + str3 + "_Voile_AO.csv";
    FileWriter localFileWriter1 = new FileWriter(str10);
    String str11 = str4 + str3 + "_Vitesse_AO.csv";
    Object localObject = new FileWriter(str11);
    for (int i8 = 0; i8 < 182; i8++)
    {
      String str13 = "";
      String str14 = "";
      int i13;
      if (i8 == 0) {
        for (i13 = 0; i13 < 131; i13++)
        {
          str13 = str13 + a(d[i8][i13], 2) + ";";
          str14 = str14 + a(f[i8][i13], 2) + ";";
        }
      } else {
        for (i13 = 0; i13 < 131; i13++)
        {
          str13 = str13 + d[i8][i13] + ";";
          str14 = str14 + a(f[i8][i13], 4) + ";";
        }
      }
      str13 = str13 + "\n";
      str14 = str14 + "\n";
      localFileWriter1.write(str13);
      ((FileWriter)localObject).write(str14);
    }
    localFileWriter1.close();
    ((FileWriter)localObject).close();
    for (i8 = 0; i8 < 200; i8++) {
      d[i8][0] = b[i8][0];
    }
    for (i8 = 0; i8 < 72; i8++)
    {
      d[0][i8] = b[0][i8];
      f[0][i8] = b[0][i8];
    }
    for (i8 = 1; i8 < 182; i8++) {
      for (int i10 = 1; i10 < 132; i10++)
      {
        d1 = 0.0D;
        for (int i12 = 0; i12 < 2; i12++) {
          if (h[i12][i8][i10] > d1)
          {
            d1 = h[i12][i8][i10];
            d[i8][i10] = Double.parseDouble(m[i12]);
            f[i8][i10] = d1;
          }
        }
      }
    }
    for (i8 = 1; i8 < 132; i8++)
    {
      d[1][i8] = d[2][i8];
      f[1][i8] = 0.0D;
    }
    for (i8 = 1; i8 < 132; i8++) {
      d['µ'][i8] = d['´'][i8];
    }
    for (i8 = 1; i8 < 182; i8++)
    {
      d[i8][1] = d[i8][2];
      f[i8][1] = 0.0D;
    }
    String str12 = str4 + str3 + "_Voile_SO.csv";
    FileWriter localFileWriter2 = new FileWriter(str12);
    String str15 = str4 + str3 + "_Vitesse_SO.csv";
    FileWriter localFileWriter3 = new FileWriter(str15);
    for (int i15 = 0; i15 < 182; i15++)
    {
      String str17 = "";
      String str18 = "";
      if (i15 == 0) {
        for (i18 = 0; i18 < 131; i18++)
        {
          str17 = str17 + a(d[i15][i18], 2) + ";";
          str18 = str18 + a(f[i15][i18], 2) + ";";
        }
      } else {
        for (i18 = 0; i18 < 131; i18++)
        {
          str17 = str17 + d[i15][i18] + ";";
          str18 = str18 + a(f[i15][i18], 4) + ";";
        }
      }
      str17 = str17 + "\n";
      str18 = str18 + "\n";
      localFileWriter2.write(str17);
      localFileWriter3.write(str18);
    }
    localFileWriter2.close();
    localFileWriter3.close();
    JOptionPane localJOptionPane2 = new JOptionPane();
    if (q) {
      JOptionPane.showMessageDialog(null, "Le telechargement des polaires est terminé", "Information", 1);
    } else {
      JOptionPane.showMessageDialog(null, "Le telechargement des polaires a echoué terminé", "Information", 1);
    }
  }
 
  private static double a(double paramDouble, int paramInt)
  {
    double d1 = Math.pow(10.0D, paramInt);
    return Math.floor(paramDouble * d1) / d1;
  }
}

J'ai masqué le nom du logiciel et l'URL du site volontairement, je précise que je ne cherche pas modifier ou autre le logiciel je veux juste comprendre la conversion du fichier polaire pour continuer à l'utiliser.

Les 2 fichiers (Classique et Auteur) sont téléchargeables ICI.
Les fichiers sont les mêmes mais dans le classique je dois ajouter 2 facteurs pour les valeurs vitesses bateau ce que ne fait pas nativement le logiciel puisqu'il n'est plus mis a jour.

Je comprends rien au java, je "comprends" un peu le JS, et je sèche complet ...
Ma question est la suivante : Dans le code java ci dessus voyez vous cette conversion de valeurs ? Si oui pouvez vous me l'expliquer ?

Merci