Outline figury - linia z trapezów

Odpowiedz Nowy wątek
2019-03-31 20:20
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! :)

edytowany 3x, ostatnio: Spine, 2019-03-31 21:35

Pozostało 580 znaków

2019-03-31 21:40
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ć ;-)


edytowany 1x, ostatnio: Patryk27, 2019-03-31 21:56

Pozostało 580 znaków

2019-03-31 22:18
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.

Meh, meh, a już miałem patentować ;-) - Patryk27 2019-03-31 22:19
heh, doktorat pisać :) - Spine 2019-03-31 22:20

Pozostało 580 znaków

2019-03-31 22:48

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


It's easy to hate code you didn't write, without an understanding of the context in which it was written.

Pozostało 580 znaków

2019-04-02 18:07
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

edytowany 1x, ostatnio: Spine, 2019-04-02 18:08

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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