Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Vos tutoriels et astuces


Index du Forum » Vos tutoriels et astuces » Zoom + Rotation avec MonochromeLib !
Ninestars Hors ligne Membre Points: 2462 Défis: 24 Message

Zoom + Rotation avec MonochromeLib !

Posté le 11/02/2015 22:26

Et voilà je viens d'achever un défi personnel : écrire une fonction pour agrandir ou réduire une image !

Les fonctions sont incorporées dans la libraire de PierrotLL comme toutes les autres que nous connaissons bien.
Il suffit de modifier MonochromeLib.c et MonochromeLib.h par les nouveaux en pièce jointe.

Les prototypes :
void ML_bmp_or_zoom(const unsigned char *bmp, int x, int y, int width, int height, float zoom_w, float zoom_h);
void ML_bmp_and_zoom(const unsigned char *bmp, int x, int y, int width, int height, float zoom_w, float zoom_h);
void ML_bmp_xor_zoom(const unsigned char *bmp, int x, int y, int width, int height, float zoom_w, float zoom_h);

void ML_bmp_or_rotate(const unsigned char *bmp, int x, int y, int width, int height, int angle);
void ML_bmp_and_rotate(const unsigned char *bmp, int x, int y, int width, int height, int angle);
void ML_bmp_xor_rotate(const unsigned char *bmp, int x, int y, int width, int height, int angle);


Explications :
Il suffit de mettre en argument :
- le pointeur du bmp
- la position en x
- la position en y
- la largeur d'origine
- la hauteur d'origine

- le coefficient de zoom en largeur ou l'angle de rotation
- le coefficient de zoom en hauteur

Infos complémentaires :
Les coefficients de zoom sont des flottants compris entre 0 et l'infini
- entre 0 et 1 -> réduction
- plus de 1 -> agrandissement
L'angle est un entier en degrés et dans le sens trigo (anti-horaire)
L'image tourne autour de son centre.

Nouvelle version du zoom 3x plus rapide !

Ajout des rotations

La librairie est toujours libre.

Aussi simple que ça !

Fichier joint


Az Hors ligne Membre de CreativeCalc Points: 548 Défis: 10 Message

Citer : Posté le 01/08/2015 07:25 | #


Salut, Y a-t il un moyen d’obtenir les coordonnés d'un point précis du sprite avant et après rotation (le même pixel)? Pour des collisions par exemple.. En fait je crois savoir mais j'attend de voir une réponse

Ouais question bête... j'ai trouvé
Je fais du Biohacking, des jeux vidéo et j'écris... Un lien pour les controler tous et dans les ténèbres les lier https://linktr.ee/axelfougues
Lephenixnoir En ligne Administrateur Points: 24508 Défis: 170 Message

Citer : Posté le 01/08/2015 07:31 | #


Az a écrit :
Salut, Y a-t il un moyen d’obtenir les coordonnés d'un point précis du sprite avant et après rotation (le même pixel)? Pour des collisions par exemple..

Des collisions au pixel test sur des rotations... c'est beau l'innocence...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Az Hors ligne Membre de CreativeCalc Points: 548 Défis: 10 Message

Citer : Posté le 01/08/2015 07:33 | #


j'ai pas parlé de pixel test! J'avoue y avoir pensé mais c'etais pas le choix final
Je fais du Biohacking, des jeux vidéo et j'écris... Un lien pour les controler tous et dans les ténèbres les lier https://linktr.ee/axelfougues
Lephenixnoir En ligne Administrateur Points: 24508 Défis: 170 Message

Citer : Posté le 01/08/2015 07:38 | #


Az a écrit :
j'ai pas parlé de pixel test! J'avoue y avoir pensé mais c'etais pas le choix final

Alors qu'est-ce que c'est ? Un rectangle qui contient la version pivotée ? Un simple rectangle pivoté ? Un autre masque alpha ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Az Hors ligne Membre de CreativeCalc Points: 548 Défis: 10 Message

Citer : Posté le 01/08/2015 07:46 | #


Bah j'ai une piste et il me faut la position exacte des roues pour rester au dessus, mais étant donné que la piste est assez géométrique je n'ai pas besoin de pxl test pour tester si je suis dessus/dessous etc.. Il y a peut être plus simple mais je vois pas...
Je fais du Biohacking, des jeux vidéo et j'écris... Un lien pour les controler tous et dans les ténèbres les lier https://linktr.ee/axelfougues
Lephenixnoir En ligne Administrateur Points: 24508 Défis: 170 Message

Citer : Posté le 01/08/2015 07:51 | #


Oh mais t'as pas besoin d'une telle complexité... ^^' Dans le pire des cas tu laisse une hitbox rectangulaire en réduisant un peu sa taille, même à 45 degrés ça ne gênera pas beaucoup !
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Az Hors ligne Membre de CreativeCalc Points: 548 Défis: 10 Message

Citer : Posté le 01/08/2015 07:56 | #


Mais que se passe-t il sur une cote? La voiture ne touche pas le sol? Cependant c'est peut être possible mais deux points sont plus facile a gérer non? et pour se rétablir avec la gravité il faut savoir dans quel sens elle penche.
Je fais du Biohacking, des jeux vidéo et j'écris... Un lien pour les controler tous et dans les ténèbres les lier https://linktr.ee/axelfougues
Lephenixnoir En ligne Administrateur Points: 24508 Défis: 170 Message

Citer : Posté le 01/08/2015 08:03 | #


Az a écrit :
Mais que se passe-t il sur une cote?

Ah, tu es en vue de côté...

Az a écrit :
La voiture ne touche pas le sol? Cependant c'est peut être possible mais deux points sont plus facile a gérer non? et pour se rétablir avec la gravité il faut savoir dans quel sens elle penche.

Le problème c'est que pour gérer tous les cas c'est plus compliqué que ça : imagine un pic assez court pour que chacune des roues puisse être d'un côté, par exemple.

Je pense que la meilleure manière de gérer ça c'est dévoir en mémoire des portions de pente constantes sur des petites bandes de largeur et de s'en servir pour émuler la gravité et calculer la position des roues.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Az Hors ligne Membre de CreativeCalc Points: 548 Défis: 10 Message

Citer : Posté le 01/08/2015 08:08 | #


Je vais... prendre le temps de comprendre la dernière phrase mais le sol est assez simple et fait de droites assez longues, pas de pics ni de trous si c'est ça qui cloche.
Je fais du Biohacking, des jeux vidéo et j'écris... Un lien pour les controler tous et dans les ténèbres les lier https://linktr.ee/axelfougues
Lephenixnoir En ligne Administrateur Points: 24508 Défis: 170 Message

Citer : Posté le 01/08/2015 08:10 | #


Il faut quand même gérer les cas où les deux roues ne sont pas sur des pentes identiques : n'oublie pas que la voiture ne doit pas se déformer si tu gères les deux roues indépendamment
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Az Hors ligne Membre de CreativeCalc Points: 548 Défis: 10 Message

Citer : Posté le 01/08/2015 18:23 | #


Bon, mes points tournent dans le sens contraire... comment inverser le sens de rotation?

j'utilise ca:
void CheckWheels(){
    BlackBackWheelX = (CarBlackPosX+10)-8*cos((3.14159265358979323846 / 180) *angle);
    BlackBackWheelY = (CarBlackPosY+3)-8*sin((3.14159265358979323846 / 180) *angle);
    BlackFrontWheelX = (CarBlackPosX+10)+8*cos((3.14159265358979323846 / 180) *angle);
    BlackFrontWheelY = (CarBlackPosY+3)+8*sin((3.14159265358979323846 / 180) *angle);
}


et j'ai essayé M_PI mais ca ne fonctionnais pas
Je fais du Biohacking, des jeux vidéo et j'écris... Un lien pour les controler tous et dans les ténèbres les lier https://linktr.ee/axelfougues
Ninestars Hors ligne Membre Points: 2462 Défis: 24 Message

Citer : Posté le 01/08/2015 18:28 | #


Alors pas besoin de mettre autant de chiffres Az, une précision au milliardième de radian de sert pas trop 3.14 suffit
Ensuite pour inverser le sens il suffit me mettre -angle
Az Hors ligne Membre de CreativeCalc Points: 548 Défis: 10 Message

Citer : Posté le 01/08/2015 18:30 | #


MERCI! . Youpi ça marche, je vais peut être avoir quelque chose de potable pour les CPC
Je fais du Biohacking, des jeux vidéo et j'écris... Un lien pour les controler tous et dans les ténèbres les lier https://linktr.ee/axelfougues
Ninestars Hors ligne Membre Points: 2462 Défis: 24 Message

Citer : Posté le 01/08/2015 18:34 | #


De rien, et t'as dû voir, quand t'es proche des 45 degrés d'inclinaison, les images pivotées sont un peu crados. Faudrait que je revois mon algo, en faisant l'inverse : au lieu de pendre un pixel du bitmap et l'afficher à l'écran, il vaut mieux choisir un pixel à l'écran et lui donner la bonne couleur, ça évite les trous :/
Az Hors ligne Membre de CreativeCalc Points: 548 Défis: 10 Message

Citer : Posté le 01/08/2015 18:36 | #


J'ai vu mais franchement c'est deja mieux que tout plein de sprites! Dès que tu aura terminé je vais essayer de l'utiliser dans swing copters.
Je fais du Biohacking, des jeux vidéo et j'écris... Un lien pour les controler tous et dans les ténèbres les lier https://linktr.ee/axelfougues
Lephenixnoir En ligne Administrateur Points: 24508 Défis: 170 Message

Citer : Posté le 02/08/2015 23:01 | #


Ninestars a écrit :
Alors pas besoin de mettre autant de chiffres Az, une précision au milliardième de radian de sert pas trop 3.14 suffit

Même en astronomie on n'utilise pas plus de 20 décimales... là il en a mis 20 !
Et puis, ça ne se stocke pas ça, après 9/10 l'information est perdue... x)

Ninestars a écrit :
Faudrait que je revois mon algo, en faisant l'inverse : au lieu de pendre un pixel du bitmap et l'afficher à l'écran, il vaut mieux choisir un pixel à l'écran et lui donner la bonne couleur, ça évite les trous :/

Ça, ça dépend : pour les agrandissements, oui, pour les réductions, c'est pas forcément le bon plan. Après, je ne sais pas pour les homothéties en général mais si tu pouvais avoir une fonction intelligente pour choisir à chaque fois ce serait pas mal !
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Ninestars Hors ligne Membre Points: 2462 Défis: 24 Message

Citer : Posté le 03/08/2015 01:15 | #


Et pourquoi ça ne serait pas le bon plan ? Je ne vois pas de raison à ce que ça se passe mal, ou du moins, moins bien.
Lephenixnoir En ligne Administrateur Points: 24508 Défis: 170 Message

Citer : Posté le 03/08/2015 09:49 | #


Ninestars a écrit :
Et pourquoi ça ne serait pas le bon plan ? Je ne vois pas de raison à ce que ça se passe mal, ou du moins, moins bien.

Pour les réductions ? C'est pas assez ressemblant en général. Il manque trop de pixels (enfin, c'est ce que j'ai constaté).
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm En ligne Labélisateur Points: 11640 Défis: 176 Message

Citer : Posté le 05/08/2015 23:04 | #


Sympa, je suis de loin, ça peut toujours être utile (MS4 ? )
Sinon, à quand la version avec anti-aliasing en niveaux de gris ? Pour peu que le moteur de Lephe devienne très fonctionnel (à priori j'ai confiance là-dedans), ça peut être cool
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
-florian66- Hors ligne Ancien rédacteur Points: 2384 Défis: 20 Message

Citer : Posté le 06/08/2015 08:39 | #


Vous ne pouvez pas mettre un lien de cette nouvelle lib dans le snippet "MonochromeLib" ?

Ca éviterais de la chercher tous le temps
In Arch, I trust ! And you ?
Ninestars Hors ligne Membre Points: 2462 Défis: 24 Message

Citer : Posté le 06/08/2015 14:26 | #


C'est vrai que l'antialiasing en niveau de gris ça serait pas mal

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 58 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