Outline figury - linia z trapezów

Outline figury - linia z trapezów
Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6968
0

Zmagam się z takim zadaniem. Trochę nie wiem jak to googlować.
path967-0-49-1.png

  • Dane są współrzędne żółtych punktów i szerokość czarnej linii.

  • Jak znaleźć wektory wychodzące z żółtych punktów, przedstawione za pomocą niebieskich kresek.

  • Wektory muszą mieć takie długości, żeby czarna obwódka między żółtymi punktami zawsze miała tą samą grubość.

Nieoptymalne rozwiązanie jakie przychodzi mi do głowy, polegałoby na uzyskaniu dwóch żółtych punktów odsuniętych o wektor normalny (o długości połowy szerokości czarnej linii) od każdego żółtego odcinka:
path967-0-49-2.png
Żeby z tego policzyć, gdzie spotkają się dwie proste powstałe z odsuniętych czterech punktów.

Lepsze rozwiązania mile widziane! :)

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
1

Być może czegoś nie dostrzegam, lecz tak na pierwszy rzut oka zdaje się, że wystarczyłoby wyznaczyć środek ciężkości tej Twojej figury (średnią wszystkich punktów) i odpowiednio przeskalować figurę względem tego środka.

PoC (Rust):
https://4programmers.net/Pastebin/10997

Efekt:
figura.png
(czarne punkty - oryginalna figura; czerwone - skala 0.5; niebieskie - skala 1.5).

Wystarczy dorzucić do tego rysowanie faktycznego wielokąta, a nie samych wierzchołków, i będzie śmigać ;-)

Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6968
1

Dzięki za podejście do problemu, ale niestety nie będzie to działać tak jak chcę.
Naniosłem w Inkscape trochę grafiki na Twoje punkty i oto efekt:

path967-0-9.png

Niebieska strzałka w prawo pokazuje szerokość outline'a na jednej krawędzi.
A niebieska strzałka w lewo, ta sama strzałka, tylko obrócona w stronę sąsiedniej krawędzi.
Poza tym z połączenia punktów widać, że szerokość outline nie będzie jednakowa na wszystkich krawędziach.

neves
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 1114
2

Problem się zowie : polygon offsetting,
Do C#/Delphi jest fajna biblioteka to licząca : http://www.angusj.com/delphi/clipper.php

Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6968
2

Nie potrzebuję biblioteki. Dzięki za info o nazwie problemu :)
Zrobiłem implementację w oparciu o http://alienryderflex.com/polygon_inset/
I teraz moje kontury nabrały odpowiedniej szerokości ;)

Wcześniej do wyznaczania punktów obrysu, robiłem znormalnizowany wektor wypadkowy, znormalizowanych wektorów normalnych przylegających krawędzi:
screenshot-20190402180618.png

A teraz mam poprawne obliczenia i wszystkie krawędzie mają taką samą szerokość :)
screenshot-20190402180649.png

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.