J'ai un carré, où les points les plus proches sont à 1 unité du centre. Voir mon diagramme ASCII ci-dessous:
f(x) = sqrt(tan(x)^2+1)
4 Réponses :
Ce serait plus rapide, je suppose:
function getLengthForDeg(phi){ phi = ((phi+45)%90-45)/180*Math.PI; return 1/Math.cos(phi); }
Je pense que vous manquez un calcul racine carré, mais je peux vous incompréhenser quelque chose.
Je fais comme la façon dont vous avez l'angle normalisé.
COS (Phi) = A / C où A est 1 (le bord horizontal) et nous voulons savoir c. Puis c = A / COS (Phi). Maintenant, vous avez mentionné que vous avez 8 tartes, vous devez donc verrouiller l'intervalle de PHI entre -45 et 45 c'est pourquoi j'ai (PHI + 45)% 90-45. Mais je ne vois pas le point en utilisant SQRT.
Euh ... Cos Phi est la coordonnée X du point sur le cercle de l'unité intersectée par un rayon à angle Phi, non?
Eh bien, oui, mais les données nécessaires sont 1 / COS (X), en raison de la définition de COS.
Merci, Monomano. Je crois que votre fonction serait plus rapide que Poiny.
@Joel aussi ça va vous attirer un carré réel et non un pince étrange ou quelque chose comme ça :-)
J'ai proposé une équation pouvant fonctionner avec les calculatrices TI en raison de leur fonction Theta Step dans la section de la fenêtre de leur fonction de graphique polaire. Je ne sais pas si cela vous aide. Je suppose que cela ne peut fonctionner que si vous êtes capable de configurer l'étape Theta (ou degré).
r = (((s*sqrt(2)) - 5)/4) sin(4(x - (pi/8)) + (((s*sqrt(2)) + s)/4)
L'article original est étiqueté JavaScript, mais j'en avais besoin pour les langues dactylographiques (par exemple c) où vous ne pouvez pas moduluer un flotteur.
La réponse de MONOMANO est correcte, mais pour quelqu'un d'autre qui a besoin ici besoin de la même chose, voici le MONOMANO'S Réponse modifiée pour C / OBJC / Java / etc: p>
/** c.f. http://stackoverflow.com/a/4788992/153422 * M_PI_2 is a constant: "PI / 2" * M_PI_4 is a constant: "PI / 4" */ double getSquarePolarRadiusForRad(double phi){ double phiInPiBy4Range = phi; while( phiInPiBy4Range > M_PI_4 ) phiInPiBy4Range -= M_PI_2; while( phiInPiBy4Range < - M_PI_4 ) phiInPiBy4Range += M_PI_2; return 1/cos(phiInPiBy4Range); }
Je ne suis pas assez familier avec JavaScript, mais dans le format utilisé à Wolfram Alpha, la formule du rayon de l'angle est la suivante: p>
min (1 / abs (cos (thêta)), 1 / ABS (péché (theta)))) p>
Cela ne semble pas correct ... Si vous n'avez qu'un angle, rien ne dit combien de temps le rayon serait.
@Werner Depuis que l'OP a spécifiquement demandé environ un carré de longueur 1, vous n'avez pas besoin du rayon.
Vous n'avez vraiment besoin que de connaître la réponse pour 1 / 8ème de la place ...
Oui, mais le problème est d'obtenir chaque angle correspondant à la partie correcte de cet angle de 1/8.
Hey @Joel - revenez et choisissez la réponse de MONOMANO comme c'est celui qui est en fait raison :-)
@Pointy - Merci d'être honnête. :-)