J'utilise Java AWT pour dessiner des lignes sur un panneau ( | ---- | ---- | ---- | ---- | -------- | p>
Je connais les positions que j'aimerais dessiner les tiques à l'avance. P>
Les lignes pourraient être dans n'importe quelle position. Les tiques doivent donc être tirées à un angle relevant de la ligne elle-même. p>
Ma géométrie de base et la capacité de l'appliquer à Java me défaillent. :) p> line2d code> et
graphiques2d.drawline () code>) et je me demande comment je peux dessiner une ligne avec Tick Marks, similaire à: P>
3 Réponses :
Je vous suggère
math.atan2 code>
. li>
Affinetransform < / code>
avec traduction et rotation avant d'appeler la méthode de dessin de la règle. li>
ol> Voici un programme de test complet. (La méthode note, que vous pouvez aussi facilement dessiner des numéros ci-dessus les tiques. Les appels de serrage seraient traversant la même transformation et seraient bien "inclinés" le long de la ligne. P> p> graphique.create code> est utilisée pour créer une copie de l'objet graphique d'origine, de sorte que nous ne dégageons pas la transformation originale.) P>
p>
Intéressant, je crois que "affinetransform" est le mot clé que je cherchais. Google a produit ce didacticiel avec des composants très similaires: Glyphic.com/transform/Applet/1intro.html Maintenant, je dois juste comprendre comment l'appliquer à mon problème.
Vous l'appliquez en traduisant d'abord (déplacement) sur le point de départ souhaité, puis en tournant par l'angle souhaité (ATAN2 (DY, DX)). Combinez les deux transformations avec affinetransform.concaténate.
Ça a fière allure. J'ai besoin de me rendre plus familier avec la transformation.
choses qui ont besoin de noter: p>
newdx = dy; NEWDY = -1 * DX CODE>. LI>
- Si vous l'avez telle que
code> est un vecteur d'unité ( sqrt (dx * dx + dy + dy) == 1 code> ou DX == cos (thêta); dy = péché (thêta) code> pour certains thêta), vous devez simplement savoir à quelle distance vous souhaitez que les marques de ticks. LI>
- SX, SY sont votre démarrage x et y li>
- la longueur est la longueur de la ligne li>
- seglength est la longueur des tirets li>
- DX, DY est les pentes de la ligne d'origine li>
- newdx, newdy sont les pistes (calculées ci-dessus) des lignes de croix li>
ul>
Ainsi, p>
- Dessinez une ligne de
CODE> (Démarrer X, Y) à CODE> LI>
- Tracez un ensemble de lignes (pour (i = 0; i <= longueur; i + = intervalle) de
code> à CODE> LI>
ol>
J'aime beaucoup cette réponse car il tente d'expliquer la géométrie. Malheureusement, j'ai du mal à m'envelopper la tête autour de lui. J'ai branché les formules que vous avez décrites et je reçois des résultats très étranges pour Newdy & Newdx. (Valeurs négatives qui tombent loin à l'extérieur de la gamme de coordonnées sur mon panel) à nouveau, ma géométrie est au mieux élémentaire, mais je me demande si la formule est pour un système de coordonnées cartésiennes. Les coordonnées de Java Placez 0,0 dans le coin supérieur gauche d'un panneau.
J'espère que vous connaissez la multiplication de matrice. Afin de faire pivoter une ligne, vous devez la multiplier par matrice de rotation. (Je coudl ne dessine pas une matrice appropriée mais suppose que les deux lignes ne sont pas séparées) Les anciens points sont X, Y et le nouveau sont X ', Y'. Illustrons par un exemple, disons que vous avez une ligne verticale de (0,0) à (0,1), vous souhaitez maintenant le faire pivoter de 90 degrés. (0,0) restera zéro alors voyez simplement ce qui arrive à (0,1) p> == p> vous arrivez à la ligne horizontale espérons qu'il aide, (0,0), (0,1) code> comme vous l'attendez. P >
Roni p> p>
Voulez-vous dessiner les lignes "souverain" dans les directions arbitraires? Sont les tiques à intervalles fixes ou souhaitez-vous qu'ils apparaissent, à 0%, 33%, 66%, 100%?
S'il vous plaît voir ci-dessous pour la description des graphiques en général. Les traces seront uniformément espacées d'espacement arbitraire. (IE: J'ai besoin d'une solution où je peux segmenter une ligne et dessiner un nombre arbitraire de ces tiques le long de sa longueur à chaque segment)
Faites-moi savoir ce que vous pensez de ma réponse.