Programme en Maple - Algo - Programmation
Marsh Posté le 19-11-2007 à 16:32:54
Marsh Posté le 19-11-2007 à 16:34:41
Un autre problème : est-ce que l'énoncé stipule qu'il faut rechercher des points de coordonnées entières ?
Marsh Posté le 19-11-2007 à 16:39:56
Euh...
Triangle de 273 mètres de coté... Angles de 60°... J'en déduit que ton triangle est équilatéral non ?
Ben y'a quand même plus simple pour trouver le centre de grativé/orthocentre/centre du cercle circonscrit/centre du cercle inscrit à ton triangle...
Je te renvoie à tes cours de 6°...
http://pagesperso-orange.fr/pierre [...] iEqu01.htm
Honnêtement, ça se fait en 4 lignes, même en ASM, et pas besoin d'avoir un côté sur l'axe X ou Y...
Utilise simplement la formule du calcul du centre de gravité... Même pas besoin de faire intervenir le moindre calcul à base de sin() et cnie... Deux bêtes addition et deux bonnes divisions par 3 et roule ma poule, je vois pas comment on peut faire plus simple... Ah si, peut-être trouver le centre de gravité d'un point
/me vient de réalister... Tu cherches peut-être pas le point qui est à la même distance de chaque point, mais celui qui sera à une distance entière de chacun des points c'est ça ?
Marsh Posté le 19-11-2007 à 16:47:02
MagicBuzz a écrit : /me vient de réalister... Tu cherches peut-être pas le point qui est à la même distance de chaque point, mais celui qui sera à une distance entière de chacun des points c'est ça ? |
Oui, je crois que c'est ça...
Par contre, ce qui n'est pas clair c'est si on cherche un point de coordonnées entières, ou un point quelconque...
Marsh Posté le 19-11-2007 à 16:48:51
Sinon, moi je ferais pas comme ça.
Je dirais que :
- Ton point doit de trouver sur le cercle c1 de centre A et de rayon r1 entier.
- Ton point doit de trouver sur le cercle c2 de centre B et de rayon r2 entier.
- Ton point doit de trouver sur le cercle c3 de centre C et de rayon r3 entier.
Donc moi je tenterais de trouver le point d'intersection commun des cercles r1, r2 et r3.
Ceci donne d'ailleurs comme conclusion qu'il y a au point 3 points (qui peuvent être confondus) qui répondent au problème.
Marsh Posté le 19-11-2007 à 16:51:17
Il y a plein de cercles de centre A et de rayon r1 entier
Et étant donnés trois rayons entiers r1, r2, r3, rien ne prouve que les 3 cercles sont concourrants.
Marsh Posté le 19-11-2007 à 17:36:06
Y'en a 273 pour être exact.
Mais déjà, tu peux partir du principe qu'il ne peux pas être de rayon > que distance avec lecentre de gravité, sinon le point "équivalent" en partant des deux autres somment vient remplacer ceux que tu as déjà fait.
Donc.
|
Ca me semble être la solution la plus simple.
Du moins, c'est la solution "humaine" que 3 maçons peuvent aisément mettre en oeuvre avec chacun une corde attachée à chacun des 3 sommets.
Un matheux te trouveras certainement de grosses optimisations évidentes, mais moi et la théorie matheuse... Une corde et un maçon au bout, ça je me le représente, des sqtr(cos(pi/12)) là moi je nage.
Marsh Posté le 19-11-2007 à 18:10:56
franceso a écrit :
|
Lol ok donc je vais chercher du coté des droites alors.
Pourquoi 1e-5? Mon prof d'algo m'as dit que c'etait correct, apres il se trompe peut etre ..
En effet il y a surement une methode plus "mathematique" et "logique" mais je ne vois vraiment pas. J'ai eu des echos comme quoi la methode des trois cercles que vous proposez apres fonctionnerait par contre faudrait que je reflechisse a comment le programmer.
franceso a écrit : Un autre problème : est-ce que l'énoncé stipule qu'il faut rechercher des points de coordonnées entières ? |
Oui C'est la toute la difficulté du probleme.
MagicBuzz a écrit : Euh... |
franceso a écrit : Oui, je crois que c'est ça... |
Un point quelconque si j'ai bien compris le probleme.
MagicBuzz a écrit : Sinon, moi je ferais pas comme ça. |
franceso a écrit : Il y a plein de cercles de centre A et de rayon r1 entier |
MagicBuzz a écrit : Y'en a 273 pour être exact.
|
Ca me semble interessant mais je ne vois pas comment "regarder si c1, c2 et c3 ont un point d'intersection commun."
Je vais reflechir a ca.
MErci pour vos reponses.
Marsh Posté le 19-11-2007 à 18:23:08
MagicBuzz a écrit : Y'en a 273 pour être exact. |
Entièrement d'accord avec ça. Ce que je remettais en cause, c'est ta "preuve" qu'il y a "au moins trois points qui répondent au problème".
exeed> le calcul des points d'intersections de deux cercles est vraiment très classique et très simple. Si tu ne veux pas / ne sais pas le faire toi-même, une recherche te donnera rapidement les formules.
L'histoire du abs(...)<1e-5 c'est juste pour dire qu'il y a une différence entre la vraie vie et les maths. Dans la vraie vie, les nombres réels sont stockés dans des variables en virgule flottante, les cos et sin sont calculés de manière approchée, etc. Donc un test exact n'a quasiment aucune chance de marcher.
Si le point que tu recherches n'a pas forcément des coordonnées entières, oublie ton algo et pars sur celui que te proposes MagicBuzz. Il ya sans doute plein d'optimisations à faire, mais ce sera pour plus tard.
Marsh Posté le 19-11-2007 à 18:28:33
ReplyMarsh Posté le 20-11-2007 à 09:51:44
exeed a écrit : Est ce que le theoreme de Miquel est utile? |
Non, les théorèmes de Miquel ne servent à mon avis à rien dans ta situatio, puisqu'ils ne parlent pas des centres des cercles concourrants.
Marsh Posté le 20-11-2007 à 10:36:43
un autre algo plus efficace je pense que celui de MagicBuzz :
pour r1 variant de 1 à 273 |
Marsh Posté le 20-11-2007 à 14:06:46
franceso a écrit : Entièrement d'accord avec ça. Ce que je remettais en cause, c'est ta "preuve" qu'il y a "au moins trois points qui répondent au problème". |
C'est simple, tu es dans un triangle equilatéral.
En gros, quand tu trouves un point p1 avec dA = x, dB = y, dC = z, alors il existe aussi un point p2 avec dA = y, dB = z, dC = x et un point p3 avec dA = z, dB = x, dC = y.
Le seul cas où il n'y a pas 3 points, c'est si x = y = z, et que ton point est le centre de gravité (et donc les trois points sont confondus).
Ceci dit, un triangle équilatéral étant symétrique, je dois dire qu'en fait il y a non pas 3 points mais 6 points qui répondent à la question, puisque p4 (dA= x, dB = z, dC = y), p5 (dA = y, dB = x, dC = z) et p6 (dA = z, dB = y, dC = x) existent aussi.
Marsh Posté le 20-11-2007 à 14:09:56
En gros, quand t'as trouvé des distances d1, d2 et d3 qui fonctionnent, alors tu peux faire toutes les combinaisons de 3 cercles de rayon d1, d2, d3 en partant de chacun des sommets de ton triangle, il y aura un point d'intersection.
Et d'ailleurs, l'inverse est vrai aussi, et peut représenter une très grosse optimisation : pour n'importe quel d1, d2, d3 qui ne marche pas, alors ça ne marchera pas quelque soient les somments centres des cercles ayant pour rayon d1, d2 et d3 (cela devrait te permettre de réduire considérablement les itérations des boucles imbriquées).
Marsh Posté le 20-11-2007 à 15:31:08
MagicBuzz a écrit : |
OK pour la symétrie : si tu arrives à trouver un point solution, alors en général tu en obtiens d'autres par symétrie. Mais rien ne te prouve qu'il existe un point solution.
C'est une hypothèse que tu sembles faire depuis le début et qui est fausse dans le cas général. Considère par exemple un petit triangle équilatéral de côté 10 : tu ne trouveras aucune solution non triviale.
Marsh Posté le 20-11-2007 à 15:49:45
Déjà, y'a 3 points solution qui sont évident à trouver
A, B et C sont trois points qui répondent au problème avec d1 = COTE, d2 = COTE et d3 = 0
Marsh Posté le 20-11-2007 à 16:31:45
MagicBuzz a écrit : Déjà, y'a 3 points solution qui sont évident à trouver |
franceso a écrit : Considère par exemple un triangle équilatéral de côté 10 : tu ne trouveras aucune solution non triviale. |
Marsh Posté le 20-11-2007 à 16:35:40
Chais pas si ça marche (y trouve tous les points ?), mais si c'est bon, ça te donne une version optimisée de mon algo :
Code :
|
|
Si en plus tu veux les points dont les coordonées sont entières, y'a un petit filtre à rajouter...
Marsh Posté le 20-11-2007 à 16:51:07
sinon, l'algo original, c'était quoi exactement ? parceque je panne rien au code, avec l'algo ce serait peut-être plus clair
Marsh Posté le 05-12-2007 à 20:56:43
OK donc j'ai rajouté un test pour qu'une des coordonnées soient égale a 0 (le point ne peux pas être un des sommets), je tombe donc sur 6 réponses avec 2 trio de distances (qui se répètent donc 3 fois chacun, pas dans le même ordre, l'ordre n'as pas d'importance)
Y aurait il des tests supplémentaire a faire?
Je ne vois pas comment améliorer l'algorithme pourtant j'y travaille depuis plusieurs heures :x
Marsh Posté le 19-11-2007 à 13:05:44
Bonjour,
Je souhaite resoudre un challenge informatique, je dois trouver le point dans un triangle de 273 metres de coté qui est a des distances EXACTES des sommets. Pour trouver ce point j'ai faitun programme en maple (langage plus simple pour les calculs mathematiques que le C).
trianglesuper := proc ()::list;
local x::integer, y::integer, a::float, b::float, c::float;
for x to 273 do
for y to 84 do
if y < 2*x and y < -2*x+223587 then
a := sqrt(x^2+y^2);
b := sqrt((273*abs(sin(60))-y)^2+(273/2-x)^2);
c := sqrt((x-273)^2+y^2);
if floor(a)-a = 0 and floor(b)-b = 0 and floor(c)-c = 0
then return evalf([a, b, c])
end if
end if
end do
end do
end proc
J'ai modelise mon triangle dans un repere. Un des cotés se trouve sur l'axe X donc x peut aller de 0 a 273.
Les deux autres cotés sont des fonctions (2x) et (-2x+223587) car la pente de la fonction 2x fait un angle de 60° avec l'axe x et que 223587 est l'ordonée necessaire pour que la fonction coupe l'axe des abcisses en 273.
84 est l'ordonée maximale de mon triangle.
Donc avec mes boucles je suis dans un carre de 273*84(arrondi de 273*sin60) et grace a mes conditionnelles je suis dans mon triangle normalement (puisque "sous" mes fonctions), ensuite je calcule la distance du point vis a vis des 3 sommets (formules incorrectes pê :x) et si ce sont des valeurs entieres alors je les renvoie sous forme de listes.
Lorsque je l'execute il ne me renvoie rien.
Qu'ai je mal codé ?
Merci
Message édité par exeed le 19-11-2007 à 13:13:37