Je voudrais créer un cercle autour du point (x,y) avec votre distance de rayon, puis utilisez les informations ci-dessous pour créer un triangle dont la hauteur est supérieure au rayon.
Ensuite, en utilisant ces deux polygones, faites une ST_Intersection entre les deux géométries.
NOTE : Cette méthode ne fonctionne que si l'angle est inférieur à 180 degrés.
Notez que si vous étendez les bords extérieurs et que vous les rencontrez avec un angle de 90 degrés à partir du point central de votre arc, vous avez un angle et un côté adjacent. Maintenant vous pouvez SOH CAH TOA !
Obtenir les points B et C
Soit le point A = (x,y)
Pour obtenir le meilleur point :
point B = (x + rayon, y + (r * tan(angle))))
pour obtenir le point bas :
point C = (x + rayon, y - (r * tan(angle))))
Faites pivoter votre triangle vers votre azimut
Maintenant que vous avez le triangle, vous devez le faire pivoter vers votre azimut, avec un point de pivot de A. Cela signifie que le point A doit être à l'origine lorsque vous effectuez la rotation. La rotation est la partie la plus délicate. Elle est utilisée en infographie tout le temps. (En fait, si vous connaissez OpenGL, vous pouvez lui faire faire la rotation pour vous).
NOTE : Cette méthode effectue une rotation dans le sens inverse des aiguilles d'une montre d'un angle (thêta) autour de l'origine. Vous devrez peut-être ajuster votre azimut en conséquence.
Première étape : traduire votre triangle de sorte que A (votre x,y d'origine) soit à 0,0. Ce que vous avez ajouté/soustrait à x et y, faites de même pour les deux autres points.
(Vous devez le traduire parce que vous avez besoin que le point A soit à l'origine)
Deuxième étape : Faites ensuite pivoter les points B et C à l'aide d'une matrice de rotation. Plus d'informations aquí mais je vais vous donner la formule :
Your new point is (x', y')
Faites de même pour les points B et C.
Troisième étape : Traduisez-les à l'endroit d'origine en ajoutant ou en soustrayant. Si vous avez soustrait x la dernière fois, ajoutez-le cette fois-ci.
Enfin, utilisez les points {A,B,C} pour créer un triangle.
Et ensuite faire une ST_Intersection(geom_circle,geom_triangle) ;
Comme cela nécessite beaucoup de calculs, il serait préférable d'écrire un programme qui effectue tous ces calculs et remplit ensuite un tableau.