Poster un nouveau sujet Poster une réponse
Vous-entrez-dans-la-3ème-dimension
Auteur Message
clem494949



Autorisation : Membre
Nb de messages : 37
Inscrit le : Dim 08 Sep 2013, 15:30
Posté le : Mer 11 Sep 2013, 21:04   Citer 

Je suis désolé de vous déranger de nouveau mais sur mon manuel de math j'ai vu une superbe figure géométrique: un rectangle avec un point dedans et des segments qui allaient des angles, au point .
Ce truc est vraiment cool car quand on bouge ce point on a une impression de 3D
(je sais c'est le point de fuite) j'ai alors réalisé un code qui bouge un point à l'opposé des commande flèches et on a l'impression de 3D bigmouth.gif .
Je décide alors de rajouter "un tapis" au sol donc deux autres ligne qui passent par le point de fuite. Ça donne un truc encore plus cool alors je poursuit:
Je veut une porte que l'on pourrait éventuellement utiliser avec genre un curseur
(pour le curseur G une petite technique pour qu'il se voit, c'est de faire change pixel et non activer pixel bigmouth.gif )
donc la porte est un rectangle sur le mur de gauche et j'ai un souci c'est je suppose du niveau mathématique supérieur a moi (au point que formulé autrement cela pourrait passer dans un forum de math) donc comment calculer les positions des deux lignes verticales en sachant que si on baisse le regard on décale juste
la ligne vers le bas ou le haut et que si on tourne a gauche on bouge vers la gauche on bouge la ligne et on augmente la taille de celle-ci (sans utiliser de math on peut faire à l’œil au bout de 36 fois.
Pas le temps de recopier le code pour aujourd'hui mais il reste très simple (30-50 lignes) regardez cela si vous avez une bonne notion de géométrie je pense (après peut être que l'on apprend cela en seconde).

A+

----------------------
testeur de touche rapidement :
While 1
codetouche->A
If A=/=0
disp A
End
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mer 11 Sep 2013, 23:10   Citer 

Cette notion de point de fuite est similaire au RayCasting. J'en entend parler surtout pour les calculatrices dans des jeux style FPS (Wolfenstein,Doom,Quake...).

Pour ta porte si j'ai bien compris, on a un trapèze dont deux côtés sont en direction du point de fuite.
Code
A
|\
| \ B
|  |
|  |\
|  | \F
|  | /
|  |/
| / C
|/
D

^J
|
|
--->I

Connaissant A, D, F et une distance liant AD à AB ou DC, on peut déterminer B et C.
Je suppose connaître la distance L horizontale ente les deux lignes verticales.

Code
XC=XD+L
angle(I,DC)=angle(I,DF)
tan(angle(I,DC))=tan(angle(I,DF))=(YF-YD)/(XF-XD)=(YC-YD)/(XC-XD)
YC=YD+(XC-XD)*(YF-YD)/(XF-XD)=YD+L*(YF-YD)/(XF-XD)

Même raisonnement pour B.
XB=XC
YB=YA+L*(YF-YA)/(XF-XA)


Précise mieux ce que tu cherches en fonction de quoi s'il-te-plait.

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
clem494949



Autorisation : Membre
Nb de messages : 37
Inscrit le : Dim 08 Sep 2013, 15:30
Posté le : Jeu 12 Sep 2013, 19:37   Citer 

en fait ce que je veux faire c'est une porte bigmouth.gif
qui puisse se placé parfaitement en fonction de la position du point de fuite qui peut être déplacé par les flèches en x comme en y cad comme ton schémas.
Maintenant que j'y pense on peut très bien multiplier X du point F (que j'ai noté A sur mon code) par 40% par exemple pour trouver le x de la ligne. Mais Y est plus complexe j'ai rien compris de :

tan(angle(I,DC))=tan(angle(I,DF))=(YF-YD)/(XF-XD)=(YC-YD)/(XC-XD)
YC=YD+(XC-XD)*(YF-YD)/(XF-XD)=YD+L*(YF-YD)/(XF-XD)

Il est vrais que je comprend bien les math mais pourquoi utiliser la tangente si on ne peut pas mesurer les angles sans calcules ? pour une intro et déterminer des fait de base de la figure ?
et puis la suite, moi je compare les extrémités du segment avec le point de fuite et non l’extérieur, c'est plus simple non ?

Je ni comprend rien et décidément je suis obligé de recopier le code pour voir si toi tu as bien compris:


Code

0->xmin
0->ymin
96->xmax
64->ymax
47->A
33->B
lbl 0
EffDessin
(C la que l'on insert le décors)
Ligne(A+1,B,-3,-10
Ligne(A,B,99,-10
Ligne(A,B,-10,-10
Ligne(A+1,B,96,0
Ligne(A,B+1,-10,74
Ligne(A+1,B+1,106,74
(maintenant l'utilisation des test de touches)
While E=0
codetouche->E
End
If E=24
A+2->A
If E=26
A-2->A
If E=34
B+2->B
0->E
Goto 0



Et bien surpris de mettre sous estimé 27 lignes bigmouth.gif
Et donc au niveau du décors C'est là que l'on place les décors comme la porte
et au niveau des touches c'est là que l'on place les touche comme éventuellement
la touche enter pour interagir avec la porte.
Au fait j'ai vue le guide pour optimiser et Zstandard ne fonctionne à par amen pas : voila le pk des premières lignes.
donc je pense avoir deux choix ou je trouve une soluce ou je supprime lele regard vers le bas et le haut.

A+

----------------------
testeur de touche rapidement :
While 1
codetouche->A
If A=/=0
disp A
End
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 12 Sep 2013, 21:49   Citer 

à par amen = apparemment

Les tangentes sont seulement une démonstation.
Les points D,C,F sont alignés donc les segments ont un même angle.
Donc ils ont la même tangente. J'écrit les tangentes en fonction des coordonnées. tan(i,ab)=y(ab)/x(ab)
Puis je résoud l'équation des deux fractions.

Sinon on peut (et je pouvais) raisonner avec les résultats connus des tangentes aux courbes, avec ici une droite.
f(X)=f(A)+(B-A)*dérivée=f(A)+(B-A)*(f(D)-f(C))/(D-C)=f(A)+(B-A)*(f(D)-f(A))/(D-A)

On peut aussi raisonner en agrandissements pour aller droit au but. (Et il y a le théorème Thalès caché à proximité.)

Tu ne dis toujours pas quelle est la donnée qui repérera l'abscisse de la porte.
Je vais être logique.
Posons l'écart d'abscisse par rapport au point de fuite. L=XC-XF
Ainsi la porte suivra le point de fuite.
J'applique le résultat aux nouvelles données.
YC=YF+(XC-XF)*(YD-YF)/(XD-XF)=YF+L*(YD-YF)/(XD-XF)


Code
0->xmin
0->ymin
96->xmax
64->ymax
47->A
33->B
-10->L  // abscisse relative éloignée
-20->M  // abscisse relative proche
While 1
EffDessin
Ligne(A+1,B,-3,-10
Ligne(A,B,99,-10
Ligne(A,B,-10,-10 // je prend -10,-10 comme point de référence bas
Ligne(A+1,B,96,0
Ligne(A,B+1,-10,74 // je prend -10,74 comme point de référence haut
Ligne(A+1,B+1,106,74
Ligne(A+L,B+L*(74-B)/(-10-A),A+L,B+L*(-10-B)/(-10-A)
Ligne(A+M,B+M*(74-B)/(-10-A),A+M,B+M*(-10-B)/(-10-A)

Repeat E
codeTouche->E
End
If E=24
A+2->A
If E=26
A-2->A
If E=34
B+2->B
If E=25
B-2->B
End

Cette théorie est incomplète car les lignes verticales sont toujours écartées de la même façon. Or il faudrait tenir compte de la position du point de fuite pour ajuster.

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
clem494949



Autorisation : Membre
Nb de messages : 37
Inscrit le : Dim 08 Sep 2013, 15:30
Posté le : Ven 13 Sep 2013, 0:01   Citer 

Re
J'ai vu j'ai cherché j'ai trouvé
merci j'ai enfin compris : habitué à la géométrie sans coordonné apprise jusqu'en troisieme ( enfin je pense) j'ai du chercher une bonne heure pour comprendre qu'il fallait transphormer les (YA-YB) en côté AC , (BC) // axe x
Ce qu'il m'a permis de comprendre que c'était du thales ce qui m'a remis sur le droit chemin.
je vois donc ou tu veux en venir par rapport à la remarque de fin et je pense que cela ce voit peut être mais n'est flagrant.
Je souaiterais juste savoir si sans modifier les ligne(...) on peut supprimer le point de fuite à l'affichage qui n'est pas estetique via un truc pour éffacer une zone? Si oui via quelle fonction?
Merci A+

----------------------
testeur de touche rapidement :
While 1
codetouche->A
If A=/=0
disp A
End
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Ven 13 Sep 2013, 1:40   Citer 

Tu peux effacer avec des ptoff, des pxloff, des Textes affichant espaces, des ligne blanches...
Si tu veux arrêter les fuyantes avant leur intersection, plutôt qu'effacer, même formule pour déterminer leurs extrémités que pour les verticales de la porte.

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
Google_AdSense



Publicité    



 
clem494949



Autorisation : Membre
Nb de messages : 37
Inscrit le : Dim 08 Sep 2013, 15:30
Posté le : Ven 13 Sep 2013, 18:49   Citer 

cela fonctionne mais a un peu de lenteur : je dirais 0.25 sec pour 3 lignes calculés ce qui est vraiment long. Cependant j'ai décidé de faire avancer le perso :

Code
If E=85  (cela se trouve à la fin du prog)
L+4->L
If E=95
L-4->L
...
L*2+2->M
...
If L<0
Ligne(A+L,B+L*(74-B)/(-10-A),A+L,B+L*(-10-B)/(-10-A)
If M<0
Ligne(A+M,B+M*(74-B)/(-10-A),A+M,B+M*(-10-B)/(-10-A)


Enfin voilà, cela ne peut pas aboutir à grand chose sur une calculatrice.
happy.gif
A+

----------------------
testeur de touche rapidement :
While 1
codetouche->A
If A=/=0
disp A
End
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Sam 14 Sep 2013, 13:51   Citer 

Je précise que je n'ai pas simplifié les fractions pour être clair. N'hésitez pas à retirer des négativités désagrables en opposant la somme, le numérateur, le dénominateur.
B+L*(-10-B)/(-10-A)=B+L*(10+B)/(10+A)

Tu peux accélérer en stockant les résultats et relisant plutôt que de calculer deux fois.

Tu n'es pas assez précis sur les modifications à apporter. Les points de suspension n'expliquent pas ce qui est inséré.
Je devine où placer les If et les lignes, mais pas M.

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
clem494949



Autorisation : Membre
Nb de messages : 37
Inscrit le : Dim 08 Sep 2013, 15:30
Posté le : Sam 14 Sep 2013, 14:19   Citer 

RE,
Ok je recopie

Code

0->xmin
0->ymin
96->xmax
64->ymax
47->A
33->B
-10->L 

While 1
EffDessin

Ligne(A+1,B,-3,-10
Ligne(A,B,99,-10
Ligne(A,B,-10,-10
Ligne(A+1,B,96,0
Ligne(A,B+1,-10,74
Ligne(A+1,B+1,106,74

Lbl 0
0->E
L*2+2->M

If L<0
Ligne(A+L,B+L*(74-B)/(-10-A),A+L,B+L*(-10-B)/(-10-A)
If M<0
Ligne(A+M,B+M*(74-B)/(-10-A),A+M,B+M*(-10-B)/(-10-A)

Repeat E
codeTouche->E
End

If E=24
A+4->A
If E=26
A-4->A
If E=34
B+4->B
If E=25
B-4->B
If E=95
L+4->L
If E=85
L-4->L
If E=85 ou E=95
goto 0
End



Ca,c'est avec les modifs que j'ai compris (peut être un problème avec le goto -> surcharge de ram)

(Heu mais cela ne fonctionne pas car il faut éffacer la porte à un moment donné)


Code

0->xmin
0->ymin
96->xmax
64->ymax
47->A
33->B
-10->L 

While 1
EffDessin

0->E
L*2+2->M

Ligne(A+1,B,-3,-10
Ligne(A,B,99,-10
Ligne(A,B,-10,-10
Ligne(A+1,B,96,0
Ligne(A,B+1,-10,74
Ligne(A+1,B+1,106,74

If L<0
Ligne(A+L,B+L*(74-B)/(-10-A),A+L,B+L*(-10-B)/(-10-A)
If M<0
Ligne(A+M,B+M*(74-B)/(-10-A),A+M,B+M*(-10-B)/(-10-A)

Repeat E
codeTouche->E
End

If E=24
A+4->A
If E=26
A-4->A
If E=34
B+4->B
If E=25
B-4->B
If E=95
L+4->L
If E=85
L-4->L
If E=85 ou E=95
End



Et cela c'est sans la moddif.


Ps je bosse sur un autre programme : peut-on effacer un cercle ou une ligne
à l'aide d'une formule.

----------------------
testeur de touche rapidement :
While 1
codetouche->A
If A=/=0
disp A
End
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Sam 14 Sep 2013, 16:01   Citer 

Une ligne s'efface en superposant une nouvelle ligne dont un cinquième argument est zéro.
Je ne sais pas effacer un cercle sans le faire pour chaque pixel un par un. Sauf si ce cercle a la taille d'un caractère graphique, je peux alors facilement l'effacer en écrivant des caractères espace.

Dans le cas présent Goto ne pose pas de problème car il est dansun If sans Then et que l'ensemble reste à l'intérieur de la boucle.

Pour effacer la porte quand la boucle de E=85 etc. revient au début, utilise un If avec le même test que ce qui commande la boucle. L'alternative de ce If sera les mêmes lignes que l'affichage avec l'argument d'effacement.

Code
Lbl 0
....contenu
If E=85 ou E=95
goto 0
////////deviendrait
Lbl 0
If E=85 ou E=95
//effacement
....contenu
If E=85 ou E=95
goto 0


Tu peux remplacer par une boucle.

Code
Lbl 0
 ( If E=85 ou E=95 )
 ( //effacement    )
....contenu
If E=85 ou E=95
goto 0
///////// deviendrait
Repeat E-85 et E-95
 ( If E=85 ou E=95 )
 ( //effacement    )
....contenu
End


Le second post de ton message ne marche pas car les touches 85 et 95 -/+ provoquent seulement l'arêt du programme.

Je pense qu'il serait préférable de recommencer tout l'affichage même si on se contente d'avancer dans le couloir.

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
clem494949



Autorisation : Membre
Nb de messages : 37
Inscrit le : Dim 08 Sep 2013, 15:30
Posté le : Dim 15 Sep 2013, 13:48   Citer 

Oui c'est vrais je me suis trompé j'ai mis une ligne en trop sur mon second code.:-)
C'est bien toi qui a donné l'idée de charger entièrement l'écran seulement lorsque l'on tourne la tête ce qui dans un jeu la partie ou on découvre le jeu et non joue vraiment et donc j'ai trouvé une autre solution si tu trouves la tienne pas si géniale : on réalise plusieurs niveaux qui ne comportes pas beaucoup de décor et on enlève le tapis qui ne sert pas à grand chose pour rajouter plusieurs portes et en faire un véritable jeu 3d scénarisé de plus dernière les portes on réalise des pièces d'une maison réalisés sur un modèle précis puis aménagés : un véritable univers de jeu.
Bon je commence vraiment :-) beer.gif

----------------------
testeur de touche rapidement :
While 1
codetouche->A
If A=/=0
disp A
End
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Dim 15 Sep 2013, 14:36   Citer 

Je pensais stocker le coefficient d'agrandissement pour le lire dans les executions de ligne. Je ne pensais pas à actualiser partiellement l'image.

Je m'inquiète pour le cas où le personnage se retournerait. Il faudrait plusieurs point de fuite et s'assurer qu'il n'y a pas de limite de calcul à la transition.

Bonne chance.

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
clem494949



Autorisation : Membre
Nb de messages : 37
Inscrit le : Dim 08 Sep 2013, 15:30
Posté le : Dim 15 Sep 2013, 16:41   Citer 

A ouai, pardon, de mon côté, j'ai trouvé un moyen de le bloquer lorsqu'il se retourne,j'ai enlevé le tapis,j'ai fait un bug au niveau de la porte, j'ai mis une interaction avec la porte et donc une salle type avec une fenêtre et une clef qui sera surement utile et j'ai rajouté "la brume":


Code

0->xmin
0->ymin
96->xmax
64->ymax
47->A
33->B
0->L 

Lbl 0
Repeat L=22 et E=105
EffDessin

If L=22
Texte(5,34,"ENTRER ?

Ligne(A-8,B-8,-10,-10
Ligne(A+8,B-8,106,-10
Ligne(A-8,B+8,-10,+74
Ligne(A+8,B+8,106,+74

0->E
L*2+2->M

If L<-10
Ligne(A+L,B+L*(74-B)/(-10-A),A+L,B+L*(-10-B)/(-10-A)
If M<-10
Ligne(A+M,B+M*(74-B)/(-10-A),A+M,B+M*(-10-B)/(-10-A)

Repeat E
codeTouche->E
End

If E=24 et A<70
A+4->A
If E=26 et A>26
A-4->A
If E=34 et B<43
B+4->B
If E=25 et B>21
B-4->B
If E=95
L-2->L
End

Effdessin

Ligne(10,10,86,10
Ligne(10,10,10,54
Ligne(86,54,86,10
Ligne(86,54,10,54

Ligne(10,10,0,0
Ligne(86,54,96,64
Ligne(86,10,96,0
Ligne(10,54,0,64

Ligne(35,50,35,40
Ligne(51,50,51,40
Ligne(35,50,35,40
Ligne(51,50,51,40    (une petite salle type sympathique)

If L=-22
Then
Texte(38,20,"[
Texte(36,20,"[
Texte(33,19,"O       (c'est un o comme over 
Pause
Texte(5,15,"OBTENIR UNE CLEF
Texte(33,19,"       (trois espace
Texte(38,20,"       (quatre espace
Pxl-on(35,20
Pause
-44->L              (cela sert à partir plus loin que la porte et cacher le bug
End                  de la porte qui va plus vite quand elle est plus loin que
If L=-44             quand elle est plus proche)
Goto 0               (je pense que c'est pas compacte là)



Woula C tout bigmouth.gif

----------------------
testeur de touche rapidement :
While 1
codetouche->A
If A=/=0
disp A
End
 Adresse email Haut de page Bas de page 
 
Poster un nouveau sujet Poster une réponse





  Powered by Fire-Soft-Board v1.0.10 © 2004 - 2024 Groupe FSB
Page générée en 9 requêtes
BlackOne par Grimmlink