J'ai déjà posé cette question auparavant, mais je pense que je l'ai mal formulée et que je n'ai donc reçu aucune réponse. J'essaie de faire une application pour Android qui dessine le chemin d'un objet en mouvement de projectile. J'ai les équations pour faire ce travail, mais pour une raison quelconque, quand je cours mon programme, tout ce que je reçois est de 2 lignes connectées au lieu de l'arc approprié. J'ai regardé cela pendant des heures, quelqu'un peut-il me dire ce qui se passe et ce que je dois faire pour le réparer? Voici mon code:Dessin d'un chemin de mouvement de projectile sous Android
float constx = 400;
float consty = 375;
float deltx = (float) ProjectileMotionDrawingActivity.dx;
float delty = (float) ProjectileMotionDrawingActivity.dy;
float maxDrawingHeight;
float totwidth;
float totheight;
float starty;
float ydist;
float cx = canvas.getWidth()/2;
float cy = 210;
boolean limiter;
float vin = (float) ProjectileMotionDrawingActivity.vin;
float vxd = (float) ProjectileMotionDrawingActivity.vxd;
float acc = (float) ProjectileMotionDrawingActivity.ac;
float scaleda;
float scaledv;
float scaledvi;
//Set background color and get paint ready
canvas.drawColor(Color.WHITE);
Paint linePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
linePaint.setColor(Color.BLACK);
//Define maxDrawingHeight
if(delty >= 0){
maxDrawingHeight = (float) ProjectileMotionDrawingActivity.mhe;
}else{
maxDrawingHeight = (float) (ProjectileMotionDrawingActivity.mhe + Math.abs(delty));
}
// Determine whether x or y is limiting factor (true=x, false =y) (For future use if needed)
if(Math.abs(maxDrawingHeight/deltx) >=consty/constx){
limiter = false;
}else{
limiter = true;
}
//set width and height of projectile motion
if(limiter){
totwidth = constx;
totheight = constx*maxDrawingHeight/deltx;
scaleda = acc*constx/deltx;
scaledvi = vin*constx/deltx;
scaledv = vxd*constx/deltx;
}else{
totheight = consty;
totwidth = consty*deltx/maxDrawingHeight;
scaleda = acc*consty/maxDrawingHeight;
scaledvi = vin*consty/maxDrawingHeight;
scaledv = vxd*consty/maxDrawingHeight;
}
//height of cliff
ydist = delty*totheight/maxDrawingHeight;
//start height
starty = cy+(totheight/2);
canvas.drawLine(0, starty, totwidth+35, starty, linePaint);
canvas.drawLine(totwidth+35, starty, totwidth+35, starty-ydist, linePaint);
canvas.drawLine(totwidth+35, starty-ydist, 2*cx, starty-ydist, linePaint);
//Parabola
float porabx = 35;
float poraby = starty;
float porabx2 = 35 + totwidth/50;
float poraby2 = (float) (starty - scaledvi*porabx2/scaledv-.5*scaleda*Math.pow(porabx2/scaledv,2));
for(int i=0;i<50;i++){
canvas.drawLine(porabx, poraby, porabx2, poraby2 , linePaint);
porabx = porabx2;
poraby = poraby2;
porabx2 += totwidth/50;
poraby2 = (float) (starty - scaledvi*porabx2/scaledv-.5*scaleda*Math.pow(porabx2/scaledv,2));
}
}
Mise à jour (Il dessine aussi le sol, mais cette partie semble fonctionner Il est inclus parce que certaines des variables utilisées pour créer le sol sont également utilisés dans l'arc..): Après En regardant cela pendant un moment et en essayant des nombres différents, je crois que la première ligne tracée est la première (1/50) correcte de l'arc. Pour une raison quelconque, il semble qu'il y ait un problème avec la variable poraby2 dans la boucle.
Mon commentaire sur la version précédente de cette question est toujours présent. Si vous voulez résoudre ce problème, vous devez faire des efforts. – Beta