Inscrit le: 12 Nov 2009 Messages: 711 Sujets: 50 Spécialité en worldedit: Vétéran
Posté le: 08/07/14 11:55 Sujet du message: Point dans section de cercle
Salut,
Voila, j'ai essayé de récupérer un point aléatoire dans un cercle compris entre une valeur d'angle Min et Max avec le cercle diviser en 3 partie la 2e étant celle recherché
Secret:
Section = [HI]
Voici la première version, simple mais non fonctionnel apparemment :/
Jass:
function GetRandomLocInArc takes real Xcenter, real Ycenter, real AngleMin, real AngleMax, real Area, real coefficient returns location
local location rdLoc
if coefficient == 1 then
set rdLoc = PolarProjection(Xcenter, Ycenter, GetRandomReal(0, Area), GetRandomReal(AngleMin, AngleMax) )
elseif coefficient > 0.00 and coefficient < 1.00 then
set rdLoc = PolarProjection(Xcenter, Ycenter, GetRandomReal( 0+(Area*coefficient), Area-(Area*coefficient)), GetRandomReal(AngleMin, AngleMax) )
endif
return rdLoc
endfunction
_________________
C'est en forgeant que l'on devient forgeron
"Le feu ne peut tuer le dragon"
Inscrit le: 12 Nov 2009 Messages: 711 Sujets: 50 Spécialité en worldedit: Vétéran
Posté le: 08/07/14 12:08 Sujet du message:
degré pquoi, faut donner en rad?
Edit:
Jass:
function PolarProjection takes real Xsource, real Ysource, real dist, real angle returns location
local real x = Xsource + dist * Cos(angle * bj_DEGTORAD)
local real y = Ysource + dist * Sin(angle * bj_DEGTORAD)
return Location(x, y)
endfunction
Cette fonction s'en occupe déja nan? _________________
C'est en forgeant que l'on devient forgeron
"Le feu ne peut tuer le dragon"
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
Posté le: 08/07/14 12:57 Sujet du message:
Je vois pas de problème, mais essaie ça :
Jass:
function GetRandomRadius takes real min, real max returns real
return SquareRoot(min*min+GetRandomReal(0,max*max-min*min))
endfunction
function GetRandomLocInArc takes real Xcenter, real Ycenter, real AngleMin, real AngleMax, real Area, real coefficient returns location
local real radius = GetRandomRadius(coefficient*Area, Area)
local real angle = GetRandomReal(AngleMin, AngleMax)
return PolarProjection(Xcenter, Ycenter, radius, angle)
endfunction
Si tu choisis un rayon aléatoire de manière naïve, tu te retrouves avec des points plus concentrés au centre que sur les bords. Je m'en suis occupé donc.
Le cas du disque plein (et pas de l'anneau) est fait avec "coefficient == 0" et y'a plus besoin de distinguer les cas.
J'ai pas testé le script. Dis-le me le si ça bug mais à mon avis, ton problème vient de la façon dont tu appelles ta fonction. Faudrait que tu nous le montre aussi.
N'oublie pas que, sur ton dessin :
• si tu veux un point dans le quart en haut à gauche, alors "AngleMin == 90" et "AngleMax == 180",
• si tu veux un point dans les autres quarts, alors "AngleMin == -180" et "AngleMax == 90". _________________
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum