Posté le 13/02/2017 19:18
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 251 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 10/12/2017 09:38 | #
Il y a deux indices qui te montrent que ça ne peut pas être les coordonnées de ton point !
3. Pour chaque point de l'espace [...]
Si je peux calculer M avant de commencer à boucler, c'est que M est la même pour tous les points.
Et :
Citer : Posté le 10/12/2017 09:42 | #
Ah et la matrice dans laquelle j'ai mis mes points (1 ligne=à point 3D) , comme celles qui la transforment, comment je peut faire pour pouvoir mettre plus que 4 points car c'est la taille des matrices de transformations et quand j'en met plus, il me fait une erreur..?
-Planétarium 2
Citer : Posté le 10/12/2017 09:45 | #
Tu peux pas faire ça !
Une transformation, c'est une matrice 4×4 multipliée à droite par un vecteur 4×1. Tu dois extraire chaque point 3D de ta grosse matrice de stockage, le charger dans une matrice colonne, faire la multiplication, afficher le résultat à l'écran. Et recommencer avec un autre point.
Il y a peut-être une méthode d'optimisation qui te permettrait de faire ça plus vite, mais ce n'est pas le principe. (Je vais y réfléchir)
Citer : Posté le 12/12/2017 18:55 | #
Merci, mais maintenant, j'aimerais en savoir un peut plus sur la pratique (meme si c'est ce que l'ont fit depuis un temps et je sais que ce n'est pas le meilleur support mais c'est bien pour commencer..)
Avant tout je veut juste te prévenir: il y a un truc que je déteste: piquer les idées des autres et dire que ce sont les nôtres.. bref, j'apprécie avant tout les idées qui viennent de moi (bien sur j'accepte celles des autres).. je veut trouver les solutions moi même.. donc, je voulais te demander si il n'y avait pas un programme sur ce site sur lequel je pourrait voir un peut a quoi ressemble la pratique.. et en basic casio si possible.. j'ai pensé a certains utilitaires en 3D mais je ne sais pas si c'est un bon support. (par exemple: until 3d de Neuronix ou encore Graph 3D de..Neuronix aussi Anapi 3d de Nowix ou Real 3d de Simsoft..) ?
merci de ta future réponse
PS: ton aide m'est très précieuse merci
-Planétarium 2
Citer : Posté le 12/12/2017 19:01 | #
Il y a le moteur 3D de ninestars : http://www.planet-casio.com/Fr/forums/topic14525-8-Windmill,:,moteur,graphique,3D.html
Ecrivez vos programmes basic sur PC avec BIDE
Citer : Posté le 12/12/2017 19:04 | #
Je te remercie mais j'ai déjà vu ce programme et il est très impressionnent, mais j'ai dit plus haut:
je voulais te demander si il n'y avait pas un programme sur ce site sur lequel je pourrait voir un peut a quoi ressemble la pratique.. et en basic casio si possible..
....
-Planétarium 2
Citer : Posté le 12/12/2017 19:07 | #
Déjà que ça lague en C, en basic casio ça va tourner à 1 fps
Ecrivez vos programmes basic sur PC avec BIDE
Citer : Posté le 12/12/2017 19:11 | #
ouais, je sais... 8) mais tu vois je suis plutôt fort en Basic (même si ça ne se voit pas trop au travers mes programme.. ) et je n'ais presque aucune connaissance en C (je me penche dessus en ce moment). Et je veut outrepasser la vitesse du Basic. C'est juste pour apprendre la base. En gros je m'en fous si ça lague ..
Ajouté le 13/12/2017 à 07:28 :
La il y a un truc qui m'échappe : plus haut tu m'as dit que je devais charger mes points dans une autre matrice un par un.. .ais c'est la que ça ne vas plus car maintenant la matrice qui contient le point est maintenant trop petite pour être multipliee à d'autres..? Du coup en plus je ne voyais pas du tout comment on pourrait transférer une seule ligne sur une autre matric..?e
-Planétarium 2
Citer : Posté le 13/12/2017 07:49 | #
La multiplication de matrices est une opération un peu bizarre si l'on n'est pas habitué. Normalement on note la dimension d'une matrice (n, p) où n est le nombre de lignes et le nombre de colonnes. On peut multiplier une matrice de taille (n, p) par une matrice de taille (n', p') si et seulement si p = n', et alors on obtient une matrice de taille (n, p').
En particulier tu peux voir que multiplier un matrice colonne (4, 1) par une matrice ligne (1, 4) donne une matrice carrée (4, 4), mais le même calcul dans l'autre sens donne une matrice carrée (1, 1). Il faut donc toujours surveiller l'ordre dans lequel on multiplie des matrices car l'opération n'est pas commutative (y compris quand la dimension est la même dans les deux sens).
Ton vecteur 4D est une matrice (4, 1). Ta matrice de transformation est une matrice (4, 4). Tu multiplies la seconde à gauche par la première à droite, et tu obtiens un autre vecteur 4D qui décrit le point transformé ; rien d'autre.
Ta matrice (N, 4) où N est le nombre de points dans ton monde est adaptée pour stocker des données, mais a priori pas pour faire les calculs car tu n'as pas de garantie que tu pourras faire un produit matriciel, ni qu'il te donnera le bon résultat.
En fait ça va marcher, mais je veux être sûr que le principe soit très clair pour toi avant d'attaquer sur ce qui est optimisable ou pas.
Citer : Posté le 13/12/2017 12:45 | #
En fait, sur l'application, j'ai déjà testé plusieurs choses, mais le tout reste quand meme un peut flou quand à la mise en forme dans un programme. En effet, pour les optimisations, il est plus sage d'attendre que j'ai réussit à obtenir un résultat, ... sur le côté des matrices c'est très flou, en effet ce n'est pas clair pour moi la manière de les multipliées et de calculer l'affichage sans Graph (x,y)=() (se que j'ai fait jusque là,...). C,est vraiment l'application sur basic qui me pose problème (bien sûr je ne te demanderais jamais de me cracher un programme comme ça, je veut comprendre...).
Donc si tu veut bien préciser l'application ce serait génial
Merci beaucoup
-Planétarium 2
Citer : Posté le 13/12/2017 17:40 | #
Pour multiplier des matrices, c'est Mat A×Mat B→Mat C... rien de plus. Tu n'as pas besoin de savoir comment on calcule le produit de deux matrices. Tu pourrais (tu le sais peut-être), mais de là à expliquer pourquoi les matrices que je t'ai données marchent, il y a un peu trop d'algèbre linéaire...
Tu fais du graphe paramétrique si tu le veux en fait. C'est indépendant de la méthode de calcul. Moi je te dis comment calculer la position des points sur l'écran, toi tu les affiches comme tu veux.
Par contre tu ne peux pas faire un Graph(X,Y)=(...) direct avec la méthode de calcul à l'intérieur de la fonction. Il faut que tu calcules les points d'abort et que tu fasses tes dessins après. La démarche serait en gros :
1. Vider la liste/matrice/paire de listes dans laquelle tu stockes les coordonnées des points à tracer
2. Pour chaque point du monde, lu dans la matrice de la map (qui ne change jamais) :
3. Transformer le point à l'aide d'un produit matriciel
4. Projeter le point sur l'écran en divisant deux coordonnées par la troisième
5. Ajouter le résultat à la liste/matrice/paire de listes dans laquelle tu stockes les points à tracer
6. Utiliser le Super DrawStat pour afficher d'un coup tous les points calculés
Je pense qu'en croisant tous les listings de ce genre que j'ai postés sur ce topic, tu dois pouvoir obtenir quelque chose de relativement précis pour ton programme. N'hésite pas à redemander des détails.
Citer : Posté le 13/12/2017 17:47 | #
Ok je vois ça des que j'ai du temps, ce que j'ai fait c'est d'imprimer tous tes gros posts pour avoir un accès encore plus rapide...
En ce moment je révise la brevet blanc... mardi !
Ajouté le 17/12/2017 à 11:15 :
Dis, pour le Drawstat, on peut utiliser les matrices au lieu des listes ?
-Planétarium 2
Citer : Posté le 17/12/2017 14:33 | #
Tu fais ce que tu veux, le Super DrawStat n'a pas de notions de listes ; seulement de fonctions (paramétriques). Tant que l'évaluation des expressions que tu fournis pour les différentes valeurs de T données par le range (que tu fournis aussi, dans le View-Window) se termine sur les abscisses et les ordonnées que tu veux, le système s'en fout.
Citer : Posté le 17/12/2017 17:25 | #
Ouais, mais là, je veut afficher des points et les relier, points qui se trouvent dans une matrice de 4x1 (1 colone et 4 lignes) et j,ai essayé pleins de trucs pour afficher mes points mais je n,ai rien trouvé qui fonctionne bien.... une idée là dessus..?
Sinon, au niveau des matrices et des transformations, tout est au point, il ne manque plus que l'affichage ! J,ai bien avancé
PS: les gens regardent souvent leurs messages privés ou non ? car là j'ai envoyé un message a Totoyo et il me répond pas..?
-Planétarium 2
Citer : Posté le 17/12/2017 19:02 | #
Ben, si c'est la matrice A par exemple...
en supposant que tes les coordonnées à l'écran de tes points ce soit les deux premières composantes du vecteur. As-tu bien pensé à effectuer la projection ?
Par ailleurs ça ne joindra pas le premier point et le dernier ; le plus efficace pour cela serait de recopier le premier point à la fin de la matrice.
Totoyo passe souvent mais les messages privés non nuls ne s'affichent pas toujours comme tels (obscur bug vieux comme PC). Demande-lui sur le chat ou renvoie-lui un MP. Sinon, ping-le sur le forum approprié (s'il y en a un) en lui mettant @Totoyo.
Citer : Posté le 18/12/2017 07:16 | #
La projection, j'avais prévu de la faire en même temps que ol'affichage. Du genre: x÷z,y÷z...?
Pour Totoyo, c'est bon, ça a marché merci
-Planétarium 2
Citer : Posté le 18/12/2017 07:23 | #
Ouais, c'est ça. X/Z, Y/Z... à moins que la coordonnée qui donne la profondeur ne soit pas Z. J'ai très vite fait de me mélanger les pinceaux sur ce point. Il y a un de mes messages, peut-être en page 2, où j'ai fait le calcul.
Citer : Posté le 20/12/2017 17:59 | # | Fichier joint
Alors là je suis complètement bloqué je n'arrive plus a faire quoi que ce soit...
Les matrices de mon programme sont en place, les calculs sont tous ok, et les points sont tous chargés d,une grande matrice de stokage. Les points originaux du mon de ne changent pas : ils sont tous recalculés un a un en passant par la matrice G. Matrice a partir de laquelle je les affiches. C'est une matrice de une colonne et 4 lignes. Les points qui y restent apres les calculs sont les derniers de la liste initiale.
Bref les calculs sont ok, manque que l'affichage.. mais c'est justement la que je rame.
(un coup de main n'est pas de refus.. stp )
Je mets le programme en lien (je ne suis pas sur de pour voir le mettre dans ce message.. déso ).
PS: j'affiche les dernieres valeurs de l matrice G pour mon test vu qu'il n'affiche rien.
-Planétarium 2
Citer : Posté le 21/12/2017 13:24 | #
Ton programme perd un temps fou à calculer plein de fois les matrices de transformation A, B et C. Elles ne dépendent ni de M ni de N ; l'objectif est justement de les sortir de la boucle !
Ensuite, ton calcul Mat D×Mat E→Mat G n'est pas au bon endroit ! Voilà à quoi ça devrait ressembler...
For 1→M To 5
For 1→N To 4
Mat F[M,N]→Mat E[N,1]
Next
Mat D×Mat E→Mat G
Pour afficher des points, projeter et afficher avec Plot
Next
Pour afficher des droites, c'est plus subtil, parce qu'il faut afficher des paires de points... juste les points pour l'instant serait suffisant.
Citer : Posté le 21/12/2017 19:28 | #
Ok. Sinon, les transformations c'est bon ? Si j'ai compris..
-Planétarium 2
Citer : Posté le 21/12/2017 21:49 | #
Ah, j'ai oublié de préciser, tu multiplies tes matrices dans le mauvais sens :
Si tu réfléchis aux règles d'associativité dont j'ai parlé plus tôt :
cx = (Mφ × Mθ × Mt) × xa
Tu te rends compte qu'on applique d'abord la matrice la plus à droite, puis on part vers la gauche... jusqu'à la « première ». La bonne manière de faire ta multiplication est donc :
À la réflexion, les deux matrices de rotation ne commutent pas, donc faudra surveiller l'ordre dans lequel tu les appliques, sans doute. Plus tard.
Sinon ça m'a l'air bien