Posté le 25/03/2019 19:45
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 87 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements
Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd
Citer : Posté le 26/03/2019 07:55 | #
Tout le monde sait que le basic n'est pas réputé pour sa vitesse d'exécution. C'est pour cela que j'ai réfléchis et regardé un peu la vitesse d'exécution du lancé d'une dizaine de rayons (je ne pense pas en faire plus ou moin à cause de la vitesse). Je me suis rendu compte que contrairement à ce que je pensais on ne gardera pas de vitesse d'exécution bien longtemps. On a un pointeur qui se déplace 10 fois et à chaque fois qui avance de 3 ou 4 cases et a chaque fois on effectue un test.. le tout mis ensemble ralentis la bête.. donc je pense que l'on ira dire bonjour au C basic très bientôt
PS: Étant donné la vitesse d'exécution et les 127 pixels de largeur de l'écran, combien de raies seraient le mieux pour avoir un compromis entre vitesse et propreté d'affichage ?
Ajouté le 26/03/2019 à 13:05 :
J'ai réussit à mettre les déplacements et le lancé de rayons ensembles. J'ai créé un petit programme ou on peut déplacer un personnage en effectuant des rotations sur lui même et en avançant pu reculant sur l'axe ou il "regarde". Le programme affiche des "1" à l'endroit de l'écran ou mon personnage voit un mur dans son champ de vision. J'ai mis une distance de détection à 4 unités. Ce programme fonctionne en locate. Ce programme est lent.. joue le poste quand j'aurais accès à mon pc.
@Mactul: excuse moi d'avancer si vite seul mais ce sujet m'excite tellement que des que j'ai du temps libre je m'attaque à ma calto
-Planétarium 2
Citer : Posté le 26/03/2019 15:23 | #
Je ne pense pas que tu dois t'excuser pour ça
Ce serait intéressant que vous arriviez à créer une démo 3D en Basic Casio "Vanilla" tournant à un frame-rate raisonnable (entre 0.5 et 3 fps serait le minimum), ça vous permettrait de voir chaque optimisations possibles, le portage vers le C.Basic vous pouvez le faire une fois le programme terminé.
(Et j'aime bien Locate.)
Je pense que pour ta question du nombre de scans, tu devrais te baser sur la vitesse d'un scan unique, donnée que le n'on a pas.
Mais je pense que le strict minimum serait le format 4:3, ici 84 colonnes, au mieux 16:9 soit 112 colonnes (j'ai fait de tête ce sont des approximations).
Citer : Posté le 26/03/2019 20:56 | #
@Mactul : Comme tu as pu le lire plus haut j'ai commencé à développer en Basic mais je peux facilement porter en C sur le SDK. Le truc c'est que j'ai un niveau en C qui ne dépasse pas les pointeurs mais je pense que pour un projet de cette taille ça peut aller. J'ai cru comprendre que tu sait programmer en C ?
Ajouté le 27/03/2019 à 08:42 :
Je suis en train de porter mon programme en C mais il y a un élément important qui m'embête: existe-t-il une commande qui permet de passer un nombre en int sur le sdk? Comme la commande "int()" en basic ?
-Planétarium 2
Citer : Posté le 27/03/2019 08:45 | #
"Nombre" n'est pas très clair ici. De quoi est-ce que tu disposes comme donnée ?
Si c'est un float ou un double : utilise un cast, sous la forme (int)valeur. Cela tronque à l'entier inférieur.
Si c'est une chaîne de caractères : utilise la fonction atoi() de <stdlib.h> (ou mieux, strtol qui permet de vérifier toutun tas de choses comme les overflows).
Si c'est autre chose, précise-nous quoi
Citer : Posté le 27/03/2019 09:20 | #
Bon mon SDK se plain de voir ça:
On est d'accord que le tableau tel qu'il est ici indique un pointeur et non pas une valeur.
-Planétarium 2
Citer : Posté le 27/03/2019 11:12 | #
Ah mais le problème est juste de syntaxe, quand tu as un double tableau la syntaxe est map[y][x] et pas map[y,x]
Citer : Posté le 27/03/2019 11:56 | #
Merxi
Ajouté le 27/03/2019 à 13:31 :
Il existe une commande pour changer les angles de radians à degrés, mon programme tourne en degrés ?
-Planétarium 2
Citer : Posté le 27/03/2019 13:33 | #
Non, par contre tu peux définir ta propre fonction sinus/cosinus en degrés. Tu n'as pas tellement envie de faire des transformations matricielles en degrés, souviens-t'en si ça t'arrive un jour.
Citer : Posté le 27/03/2019 13:34 | #
ça c'est pas cool :'(
-Planétarium 2
Citer : Posté le 27/03/2019 13:35 | #
Yep, ya une instruction Deg pour passer en degré, et Rad pour passer en Radian (Sans oublier Grad pour…).
Tu devrais pouvoir les trouver dans [opt] ou quelque chose comme ça ♥
Citer : Posté le 27/03/2019 13:35 | #
Sur le SDK Hackcell
-Planétarium 2
Citer : Posté le 27/03/2019 13:36 | #
Oups, on est pas en Basic >_<
Citer : Posté le 27/03/2019 13:38 | #
Mais du coup ça c'est un truc que j'ai pas encore vu en maths, en degrés on à:
X=r*cos(θ)
Y=r*sin(θ)
Mais qu'as-t-on en radians ?
-Planétarium 2
Citer : Posté le 27/03/2019 13:42 | #
La même chose, sauf qu'au lieu de dire qu'un tour c'est 360°, on dit que c'est 2π ♥
Citer : Posté le 27/03/2019 13:43 | #
Hello,
@Disperseur c'est cool que tu avance bien, moi je suis un peu bloqué car j'ai pas vraiment trouvé ou tirer mes rayons, sur la matrice? (Si oui, alors je pige pas comment, NB: je n'ai pas eu le temps de lire tout vos liens)
Tu me demande si je sais programmer en C, la réponse est "non" car je suis tout débutant mais je sais traduire un programme de basic-casio vers du C, les instruction étant tellement simples...
Sell-me
Pixel
Html Intrepreter
Venez me rejoindre sur mon nouveau serveur Discord dédié a la programmation sur toutes les plateformes
https://discord.gg/bzfymHQ
Venez vous instruire, dans ce magnifique cours sur les Intelligences Artificielles que j'ai créé:
http://reseaux-neurones-a--z.ml/
Faites apprendre des choses à une machine, faites reconnaître à un ordi des images...
Citer : Posté le 27/03/2019 13:45 | #
Heu... Je ne sais pas si c'est exactement la même chose mais si tu le dit.
-Planétarium 2
Citer : Posté le 27/03/2019 13:50 | #
En degré, sin(90) = 1
En Radian, sin(π/2) =1
Ce qui change c'est l'unité de mesure des angles, c'est un peu comme la différence entre les métrés et les pouces, les deux mesures des longueurs, mais selon la situation on utilisera soit l'un soit l'autre (ou les deux et on créera le crash d'une fusée )
Citer : Posté le 27/03/2019 16:18 | #
Bon, c'est bourrin comme demande mais là je suis bloqué, il y as un truc qui m'échappe et je vois pas quoi
Voici le code en Basic:
0->Theta:0-><r>
Rad
'PARAM POS JOUEUR'
0->Theta
15->X
4->Y
'MAP'
[[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1][1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1][1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1][1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1][1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1][1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1][1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]]->Mat A
Do
ClrText
'MOOVE CALCS'
X+(cos Theta)<r>->X
Y+(sin Theta)<r>->Y
0-><r>
'PERSO'
Locate 1,1,Theta
Locate Int X,Int Y,"+"
'RAYONS'
For Theta-1frac6*pi->A To Theta+1frac6*pi Step 1frac60*pi
For 0->B To 20
If Mat A[Int ((Bsin A)+Y),Int ((Bcos A)+X)]=1
Then
Locate Int ((Bcos A)+X),Int ((Bsin A)+Y),"1"
Break
IfEnd
Next
Next
Do
LpWhile Getkey=0
Getkey=28=><r>+1-><r>
Getkey=37=><r>-1-><r>
Getkey=27=>Theta+1frac12*pi->Theta
Getkey=38=>Theta-1frac12*pi->Theta
LpWhile Getkey<>47
Et je souhaite le porter en C. J'obtiens donc çe code qui ne me rends pas la même chose et je ne vois pas pourquoi..
#include "MonochromeLib.h"
#include <math.h>
//****************************************************************************
// AddIn_main (Sample program main function)
//
// param : isAppli : 1 = This application is launched by MAIN MENU.
// : 0 = This application is launched by a strip in eACT application.
//
// OptionNum : Strip number (0~3)
// (This parameter is only used when isAppli parameter is 0.)
//
// retval : 1 = No error / 0 = Error
//
//****************************************************************************
int AddIn_main(int isAppli, unsigned short OptionNum)
{
const double PI = 3.1415926535897932;
double r = 0, angleCam = 0, camX = 15, camY = 4, distRayon = 0, angleRayon = 0 ;
unsigned int key;
int map[21] [7] = {
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
ML_clear_vram();
do{
//Calculs de deplacements
camX = camX+r*(cos(angleCam));
camY = camY+r*(sin(angleCam));
r = 0;
//Personnage
locate(camX, camY);
Print((unsigned char*)"O");
//Rayons de detection
for(angleRayon = angleCam-(1/6*PI); angleRayon<angleCam+(1/6*PI); angleRayon = angleRayon+(1/60*PI))
{
for(distRayon = 0; distRayon<20; distRayon = distRayon+1)
{
if(map[(int) (distRayon*sin(angleRayon)+camY)] [(int) (distRayon*cos(angleRayon)+camX)] == 1)
{
locate((int)distRayon*cos(angleRayon)+camX, (int)distRayon*sin(angleRayon)+camY);
Print((unsigned char*)"1");
break;
}
}
}
ML_display_vram();
while(GetKey( &key)){
return 0;
}
ML_clear_vram();
ML_clear_screen();
//Commandes
if(IsKeyDown(KEY_CTRL_UP))
{
r++;
}
if(IsKeyDown(KEY_CTRL_DOWN))
{
r--;
}
if(IsKeyDown(KEY_CTRL_LEFT))
{
angleCam = angleCam+(1/12*PI);
}
if(IsKeyDown(KEY_CTRL_RIGHT))
{
angleCam = angleCam-(1/12*PI);
}
}while (! IsKeyDown(KEY_CTRL_MENU));
return 1;
}
Si quelqu'un voit de quoi il s'agit
-Planétarium 2
Citer : Posté le 27/03/2019 16:34 | #
Une précision sur les erreurs ?
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Citer : Posté le 27/03/2019 17:04 | #
Ah oui, il n'y as pas d'erreur de compile, le programme en C n'as pas le même résultat que celui en Basic et pourtant il me semble n'avoir rien oublié
Ajouté le 27/03/2019 à 17:10 :
En fait il y a ma map stockée dans le tableau du début du programme (tableau "map" et matrice A pour le prgm basic). J'ai mon personnage qui peut se déplacer à l'écran et dans le tableau/matrice en même temps (écran et tableau/matrice on la même taille de 21*7) et le programme affiche les "murs" (représentés pas les "1" dans mon tableau/matrice) qui se trouvent dans un chap de vision allant de -30° à 30° par rapport à la direction dans laquelle regarde mon personnage. Ces murs sont représentés à l'écran par de simples "1". Le tout en radians. (pour les -30° et 30° j'ai pris -1/6*PI et 1/6*PI).
-Planétarium 2