jjDai
Messages postés291Date d'inscriptionvendredi 21 février 2003StatutMembreDernière intervention13 mars 2015
-
7 févr. 2010 à 13:01
jjDai
Messages postés291Date d'inscriptionvendredi 21 février 2003StatutMembreDernière intervention13 mars 2015
-
14 févr. 2010 à 13:43
Bonjour
Je suis une buse en trigonometrie et je n'arrive à régler le problème suivant:
Je suis en VB dotNet, mais en c# m^me topo
Je trace un secteur avec la fonction :
gr.FillPie(brush, p0.X, p0.Y, p1.X - p0.X, p1.Y - p0.Y, m_startAngle, m_sweepAngle)
dans mon exemple m_startAngle=45° et m_sweepAngle=90°
Maintenant j'essaie de tracé un carré au début et à la fin du secteur.
Qaund j'ai un cercle, pas de problème c'sst ok, mais dés que j'ai une ellipse, j'ai un écart que je n'arrive pas à calculé.
Pour calculer le point de départ je fait
'conversion en radian de l'ange de départ
aRad = startAngle * Math.PI / 180
'calcul des points x et y
' P0 est le point haut/gauche du rectangele qui contiant l'ellipse
'rx est le rayon horizontal
'ty est le rayon vertical
x = p0.X + ((rx - 1) * (1 + (Math.Cos(aRad))))
y = p0.Y + ((ry - 1) * (1 + (Math.Sin(aRad))))
'création du point puis dessin d'an carre a ce point
pStart = New Point(CInt(x), CInt(y))
Su l'image l'ange E est bien égal à 45° mais mon point se place sur la diagonale du rectangle rayonVertical x rayonHorizontal.
Le point dont je parle est le carré vert entouré d'un cercle rouge.
Les autres points rouges et jaunes ne sont que des repères. tous les 10°
J'imagine que c'est un truc du genre
aDeg = startAngle - ((1 - Math.Asin((ry / rx))) * 180 / Math.PI)
pour calculé l'angle différentiel mais c'est pas au point.
Quelqu'un aurait-il une piste pour corrige mon calcul.
jjDai
Messages postés291Date d'inscriptionvendredi 21 février 2003StatutMembreDernière intervention13 mars 2015 7 févr. 2010 à 15:29
Bon finalement j'ai trouvé j'avais oublié mais le différentiel se calcul comme suit pou ceux que cela intéresse :
aDeg = startAngle - ((Math.Atan((ry / rx))) * 180 / Math.PI)
puis l'ajouter a l'angle de départ
aRad = (((startAngle + aDeg)) + h) * Math.PI / 180
x = p0.X + ((rx - 1) * (1 + (Math.Cos(aRad))))
y = p0.Y + ((ry - 1) * (1 + (Math.Sin(aRad))))
Vb Lover
Messages postés221Date d'inscriptionvendredi 30 novembre 2001StatutMembreDernière intervention13 février 20105 13 févr. 2010 à 15:08
salut,
2 solutions pour ton problème :
1) ta première équation est juste (paramétrisation de l'ellipse), mais l'angle que tu utilises n'est pas correct. En effet, le 45° dans l'ellipse ne correspond pas au 45° du dessin, car l'ellipse est "aplatie". Il faut donc trouver "l'angle" correspondant à 45°.
2) tu décides de travailler avec ton angle de 45°, mais du coup ton équation doit doit utiliser un seul "r", et non rx et ry.
Je te fais grâce des calculs, ce que tu cherches est:
x = p0.X + rx + r * Math.Cos(aRad)
y = p0.Y + ry + r * Math.Sin(aRad),
avec aRad = startAngle * Math.PI / 180 comme avant, mais plus important,
r = 1 / Sqrt((Cos(aRad)/rx)^2 + (Sin(aRad)/ry)^2)
(désolé, je ne connais pas les fonctions VB.Net, j'en suis resté à la vieille version...)
Je ne sais pas pourquoi tu as (rx-1) et (ry-1) dans tes équations, c'est peut-être une de tes conventions... Si mon point (x,y) n'est pas à la bonne position, change donc rx et ry de mon équation par (rx-1) et (ry-1)
Bonne prog
PS : rassure-toi, tu n'es pas une telle "buse" que ça, j'ai moi aussi du réfléchir un peu ;-)
jjDai
Messages postés291Date d'inscriptionvendredi 21 février 2003StatutMembreDernière intervention13 mars 2015 14 févr. 2010 à 13:43
Bonjour
----------------
Merci pour ces infos, je vais tester ça de suite.
Pour l'adaptation avec les fonctions dotnet pas de problème.
Le -1 était à l'origine une correction de 1 pixel pour l'affichage, mais dans ce cas, ce n'ai as utile.
La il s'agit de positionner une poignée qui permettra de modifier la taille ou la position du secteur donc il faut que je puisse faire e tour du cercle sans qe la poignée se balade n'importe ou, mais bien au bout du rayon en suivant l'ellipse..
Pour info je développe une petite appli de gestion de dessin vectorielle pour les passionnés d'origami.
Les logiciel existant comme illustrator ou freehand sont super mais ne correspondent pas vraiment ce que je souhaite.