Outline figury - linia z trapezów

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! :)

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ć ;-)

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.

2

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

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1