IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Retranscrire en Java une methode écrite en c#


Sujet :

avec Java

  1. #1
    Membre du Club
    Homme Profil pro
    Chercheur d'Emploi
    Inscrit en
    Février 2017
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'Emploi

    Informations forums :
    Inscription : Février 2017
    Messages : 86
    Points : 65
    Points
    65
    Par défaut Retranscrire en Java une methode écrite en c#
    Salut a tous.

    Débutant en Java et en prog tout court me voila bien emmerdé pour retranscrire une methode en écrite au préalable en c#.

    voici la classe complete au cas ou: https://github.com/Whiplash141/Whips...or/MainForm.cs

    et la méthode en question, DoMath() ici un peu plus bas:

    Code : 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
     
            float timeToSimulate = 8f;
            float timeStep = 0.0001f; // seconds
            float gravity = 9.81f; // m/s/s
            float muzzleVelocity; // m/s
            float zeroingRange;// m
            float targetRange; // m
            float dragForce;
            float mildots;
     
            List<Vector2> positionList = new List<Vector2>();
            List<Vector2> rotatedPositionList = new List<Vector2>();
     
     
            public void InitializeValues()
            {
                targetRange = (float)numericUpDownRange.Value;
                zeroingRange = (float)numericUpDownZero.Value;
                muzzleVelocity = (float)numericUpDownBulletSpeed.Value;
                dragForce = (float)numericUpDownDragForce.Value;
                positionList.Clear();
                rotatedPositionList.Clear();
            }
            public void DoMath()
            {
                //Initial simulation
                var velocityVector = new Vector2(muzzleVelocity, 0);
                var positionVector = new Vector2(0, 0);
                positionList.Add(positionVector);
     
                for (float t = 0; t <= timeToSimulate; t += timeStep)
                {
                    var frictionAcceleration = dragForce * velocityVector.LengthSquared();
     
                    //compute total acceleration on the bullet
                    var accelerationVector = -Vector2.Normalize(velocityVector) * frictionAcceleration + new Vector2(0, -gravity);
     
     
                    //d = 1/2*a*t^2 + vi*t + d0;
                    positionVector += velocityVector * timeStep + 1 / 2 * accelerationVector * timeStep * timeStep;
                    positionList.Add(positionVector);
     
                    //vf = vi + at
                    velocityVector += accelerationVector * timeStep;
                }
     
                //Solve for zeroing position
                Vector2 zeroingPosition = new Vector2(0, 0);
                float smallestDistance = 100000;
                for (int i = 0; i < positionList.Count; i++)
                {
                    var thisPos = positionList[i];
     
                    var distanceFromOrigin = thisPos != Vector2.Zero ? thisPos.Length() : 0f;
     
                    var thisDistance = Math.Abs(distanceFromOrigin - zeroingRange);
     
                    if (thisDistance < smallestDistance)
                    {
                        zeroingPosition = thisPos;
                        smallestDistance = thisDistance;
                    }
                }
     
                //Get elevation angle for zeroing
                var zeroingElevationAngle = zeroingPosition != Vector2.Zero  ?Math.Atan(zeroingPosition.Y / -zeroingPosition.X) : 0.0;
                var cos = (float)Math.Cos(zeroingElevationAngle);
                var sin = (float)Math.Sin(zeroingElevationAngle);
     
                //Create rotation matrix (matricies are transposed from math conventions)
                var rotationMatrix = new Matrix3x2();
                rotationMatrix.M11 = cos;
                rotationMatrix.M12 = sin;
                rotationMatrix.M21 = -sin;
                rotationMatrix.M22 = cos;
     
                //Rotate all of our values
                for (int i = 0; i < positionList.Count; i++)
                {
                    rotatedPositionList.Add(Vector2.TransformNormal(positionList[i], rotationMatrix));
                }
     
                //Solve for desired range
                var targetPos = new Vector2(0, 0);
                smallestDistance = 100000;
                for (int i = 0; i < rotatedPositionList.Count; i++)
                {
                    var thisPos = rotatedPositionList[i];
     
                    var thisDistance = Math.Abs(thisPos.X - targetRange);
     
                    if (thisDistance < smallestDistance)
                    {
                        targetPos = thisPos;
                        smallestDistance = thisDistance;
                    }
                }
     
                mildots = (float)Math.Atan(-targetPos.Y / targetPos.X) * 1000f;
                string direction = mildots > 0 ? "above" : "below";
     
                textBoxMildot.Text = $"Aim {Math.Abs(mildots):N2} mildots {direction} target";
            }
    Bon alors évidement j'ai éssayé par moi même avant d'appeller a l'aide. Mais j'ai bloqué des les premieres lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                var velocityVector = new Vector2(muzzleVelocity, 0);
                var positionVector = new Vector2(0, 0);
    J'ai vu sur google qu'un vector en Java = un tableau dont la taille n'est pas predefinie mais ensuite on m'a dit qu'un vector en C# c'était pas du tout ça, il sagirait donc là d'un vecteur comme on apprend a l'école et qu'aucun n'equivalent de cette classe "Vector" n'existe en Java. Qu'il faut donc que je la crée moi même en Java. Sauf que je ne sais pas du tout comment m'y prendre. Surtout qu'il sagit ici non pas de la classe Vector mais "Vector2".

    Au passage si jamais vous voyez un moyen plus simple d''obtenir le même resultat que cette methode en java sans avoir a creer une classe vector ou autre n'hesitez pas. Le but est simplement d'avoir le resultat attendu il sagit de la retombée d'une balle de fusil sur un "simulateur" de tir (pas 100% realiste loin de là.). (exemple: en donnant comme variable targetRange = 500, zeroingRange = 254, muzzleVelocity = 850, dragForce = 0.00095, gravity = 9.81. Le resultat devrait être: 137cm) a partie graphique on s'en fou. On cherche juste le bulletdrop a savoir la distance exacte de chute vertical de la balle avant l'impact. Le but final etant de faire un generateur de tables de tirs de ce type: https://uvsonmidrangeblog.files.word...14/12/nm60.jpg (sans le vent et tout. Juste les colones Time et Drop nous interessent.)


  2. #2
    Membre éprouvé
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 628
    Points : 1 256
    Points
    1 256
    Par défaut
    Salut,

    effectivement, rien à faire sans une implémentation Java d'un Vector. Par contre, du côté de JMonkeyEngine, moteur 3D en java, ou mieux peut être de JBullet , le portage java de la librairie physique Bullet, tu devrais trouver ton bonheur.
    Si tu n'as pas besoin de la visualisation, regarde vraiment JBullet, avec une masse, une force et de la gravité tu devrait t'en sortir.

    Bon courage.
    «Dieu ne joue pas aux dés.» - Albert Einstein. Et pan! 30 ans de retard dans la théorie quantique!
    «Tout n'est pas politique, mais la politique s'intéresse à tout.» - Nicolas Machiavel. Et surtout à ceux qui ne s'y intéressent pas.

  3. #3
    Membre du Club
    Homme Profil pro
    Chercheur d'Emploi
    Inscrit en
    Février 2017
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'Emploi

    Informations forums :
    Inscription : Février 2017
    Messages : 86
    Points : 65
    Points
    65
    Par défaut
    Interessant cette histoire de JBullet. Cependant il faut vraiment une masse pour s'en servir ? Car je n'ai aucune mass. Seulement une vitesse initiale, la resistance de l'air sur la munition en question et la gravité.

    Merci a toi.

  4. #4
    Membre éprouvé
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 628
    Points : 1 256
    Points
    1 256
    Par défaut
    Pour lancer ton objet, tu va lui appliquer une force exprimée en newton. Une force est le produit de la masse par l'acceleration. Donc si tu prend une masse de 1, la force est égale à l'accélération. De là, "il suffit" d'intégrer le résultat en fonction du temps pour avoir ta vitesse. Le but étant qu'au premier recalcul de la vitesse par jbullet, ta vitesse soit la vitesse initiale donnée.
    «Dieu ne joue pas aux dés.» - Albert Einstein. Et pan! 30 ans de retard dans la théorie quantique!
    «Tout n'est pas politique, mais la politique s'intéresse à tout.» - Nicolas Machiavel. Et surtout à ceux qui ne s'y intéressent pas.

Discussions similaires

  1. Réponses: 7
    Dernier message: 16/03/2007, 19h28
  2. Compiler Le fichier JAVA (Possedant une methode NATIVE) JNI
    Par Serger dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 14/02/2007, 19h32
  3. Appel d'une methode java dans un fichier jsp
    Par kodo dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 06/05/2006, 13h46
  4. exécuter une classe dans un jar a partir d'une methode java
    Par yann_p dans le forum API standards et tierces
    Réponses: 13
    Dernier message: 13/04/2006, 15h50
  5. [Reflection] Interpreter une chaine en une methode java
    Par shaun_the_sheep dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 09/10/2004, 15h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo