Uzyskaj współrzędne przetłumaczonego wielokąta

Dec 10 2020

Mam wiele wielokątów o następującej formie, które chciałbym wykonać bardziej skomplikowane przetwarzanie i analizę w oparciu o zaktualizowaną lokalizację (np. Relacje między geometriami).

Translate[Polygon[{{0, 0}, {0, 50}, {100, 50}, {100, 0}}], {954, 840}]

Myślałem, że znalazłem swoje rozwiązanie, jak odzyskać współrzędne przetłumaczonego Polygonz wcześniejszego wątku dotyczącego Points. Jednak gdy próbowałem zastosować NormalM12.1, po prostu zwraca to wyrażenie ponownie.

Normal[Translate[Polygon[{{0, 0}, {0, 50}, {100, 50}, {100, 0}}], {954, 840}]]

Próbowałem bardziej skomplikowanych sposobów wyodrębnienia współrzędnych z Graphicsobiektu, ale bezskutecznie. Czy ktoś ma jakieś sugestie dotyczące sposobu odzyskania Polygonszaktualizowanych zakresów?

Odpowiedzi

1 kglr Dec 10 2020 at 11:12
translateToNormal[t_Translate] := TranslationTransform[#2] /@ # & @@ t

tp = Translate[Polygon[{{0, 0}, {0, 50}, {100, 50}, {100, 0}}], {954, 840}]

translateToNormal[tp]
 Polygon[{{954, 840}, {954, 890}, {1054, 890}, {1054, 840}}]

Alternatywnie,

translateToNormal2 = # /. Translate -> (TranslationTransform[#2] /@ # &) &;

translateToNormal2 @ tp
 Polygon[{{954, 840}, {954, 890}, {1054, 890}, {1054, 840}}]
Graphics[{FaceForm[], EdgeForm[{AbsoluteThickness[10], Red}], translateToNormal[tp],
  EdgeForm[{Thin, Black}], tp}]

Aby uzyskać współrzędne:

normalCoords[t_Translate] := TranslationTransform[#2] @ #[[1]] & @@ t
normalCoords[tp]
{{954, 840}, {954, 890}, {1054, 890}, {1054, 840}}