7
votes

Transcriber un polygone sur un cercle

Je vais actuellement essayer d'inscrire des diagonales d'un décagone à l'intérieur d'un cercle

comme ce Entrez l'image Description ici p>

en C # Mon approche créerait un cercle P>

 e.Graphics.DrawLine(myPen, 20, 5, 50, 50);


1 commentaires

Regarde une trigonométrie. Puisque vous savez que vous utilisez 36, 72, 108 ... degrés, et vous connaissez votre rayon r , vous pouvez utiliser math.sin et maths. COS Pour calculer les coordonnées X / Y de chaque point. mathwords.com/s/sohcahtoa.htm Edit: donc par exemple, le x- Coordonnée du premier point à 36 degrés pourrait être RADIUS * MATH.COS (MATH.PI / 5) (Sachez que MATH.SIN / COS Prenez des radians, pas de degrés )


3 Réponses :


6
votes

Un moyen de traiter avec ceci utilise des fonctions trigonométriques sin et cos . Passez-les l'angle désiré, dans les radians, dans une boucle (vous avez besoin d'un multiple de 2 * π / 10 , c'est-à-dire a = i * π / 5 pour pour i entre 0 et 9, inclus). r * sin (a) vous donnera le décalage vertical de l'origine; r * cos (a) vous donnera le décalage horizontal.

Notez que sin et cos est compris entre -1 à 1 , vous verrez donc donc vous verrez résultats positifs et négatifs. Vous devrez ajouter un décalage pour le centre de votre cercle pour que les points apparaissent aux bons endroits.

Une fois que vous avez généré une liste de points, connectez le point i à point i + 1 . Lorsque vous atteignez le neuvième point, connectez-le au point initial pour compléter le polygone.


0 commentaires

2
votes

Je ne le teste pas, mais je pense que c'est bien. XXX

(FMOD est C ++ La fonction est égale à floatnumber% floatnumber)


0 commentaires

6
votes

Juste pour les grains et les tibias, voici une implémentation générique qui inscrivra un polygone à facettes dans le rectangle que vous le transmettez. Notez que dans cette approche, je ne calculez pas réellement aucun point absolu. Au lieu de cela, je traduisez l'origine, tournant la surface et dessinez les lignes uniquement par rapport à l'origine à l'aide d'une longueur fixe et d'un angle. Ceci est répété dans une boucle pour atteindre le résultat final ci-dessous et est très similaire à la commande de la tortue dans Logo :

polygone inscrit xxx < p> J'ai obtenu la formule de la longueur de la partie ici à calculatrice de polygone régulière .


4 commentaires

C'est un enfer d'un exemple.


Si je vais utiliser cette approche, comment puis-je déplacer tout l'objet (décagionnon inscrit dans un cercle) d'un point à un autre? L'objectif principal de mon projet est de projeter la traduction, la rotation, etc.etc.


Il tire sur la base du rectangle vous passez. Passez simplement le nouveau rectangle à Inscambernepolygon () et le dessinera à l'emplacement spécifié.


Stockez le rectangle au niveau de la classe (formulaire). Ensuite, vous modifiez simplement ce rectangle et appelez this.refresh (); . L'événement de peinture () passera ensuite simplement E.graphics , le rectangle et le nombre de côtés (10) à inscrits (). Le décagone redessinera instantanément dans la nouvelle taille / la nouvelle position.