-
Data: 2014-11-06 16:15:30
Temat: Eliminacja podwójnych wierzchołków = uniq na liście cyklicznej
Od: Borneq <b...@a...hidden.pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Jak przepisać jeden wielokąt na inny zamieniając się duplikujące się
(lub zwielokrotnione) wierzchołki oznaczające krawędzie długości zero?
Problem wydaje się banalny, oto przelatujemy w pętli listę wierzchołków
i kopiujemy do drugiej listy tylko gdy się różnią i tylko wtedy
zwiększamy drugi indeks.
Ale problemy są:
- jest to lista cykliczna, musimy usuwać ostatni równy pierwszemu
- chcę by pierwszy punkt pozostał pierwszym, choć ten warunek jest nie
taki ważny
- mogą być całe serie, więcej niż dwa takie same
Najpierw zliczamy ilość powtórek, to proste i działa dobrze:
int cntZeroLen = 0;
for (int i = 0; i < polyIn->n; i++)
{
Point P0 = polyIn->pts[i];
Point P1;
if (i<polyIn->n - 1)
P1 = polyIn->pts[i + 1];
else
P1 = polyIn->pts[0];
if (P0.x==P1.x && P0.y==P1.y)
cntZeroLen++;
}
To potrzebne do zaalokowania miejsca w drugim
tmpPoly.SetSize(polyIn->n - cntZeroLen);
Komplikuje się przepisywanie:
if (polyIn->n>=1) tmpPoly.pts[0] = polyIn->pts[0];
int ii=1;
for (int i = 1; i < polyIn->n; i++)
{
Point prevp = polyIn->pts[i-1];
Point p = polyIn->pts[i];
if (i<polyIn->n-1)
{
if (prevp.x!=p.x || prevp.y!=p.y)
{
tmpPoly.pts[ii] = polyIn->pts[i];
ii++;
}
}
else
{
Point firstP = polyIn->pts[0];
if ((prevp.x!=p.x || prevp.y!=p.y)
&& (firstP.x!=p.x || firstP.y!=p.y))
{
tmpPoly.pts[ii] = polyIn->pts[i];
ii++;
}
}
}
Najpierw osobno obrabiam punkt zerowy, potem inaczej zwykłe a inaczej
ostatni, ale to i tak nie działa gdy na końcu mamy więcej niż dwa jednakowe.
Przykład: nie działało dla:
n=77
[0]=[1]
[72]=[73]
[75]=[76]
[76]=[0]
czyli cała czwórka [75]=[76]=[0]=[1]
W pętli mieliśmy
tmp[1]:=in[2]
tmp[2]:=in[3]
tmp[3]:=in[4]
......
tmp[69]:=in[70]
tmp[70]:=in[71]
tmp[71]:=in[72]
tmp[72]:=in[74]
tmp[73]:=in[75]
Jak widać, źle jest dla tmp[73]:=in[75], bo in[75]=in[0]
A może jakoś cyklicznie usuwać też zerowy?
Problem trudniejszy niż działanie procedury uniq, która usuwa duplikaty
bo mamy listę cykliczną
Następne wpisy z tego wątku
- 06.11.14 16:26 Borneq
- 06.11.14 16:46 Borneq
- 07.11.14 17:13 bartekltg
- 07.11.14 17:56 Borneq
- 07.11.14 18:34 bartekltg
- 07.11.14 18:36 Borneq
- 07.11.14 20:59 bartekltg
- 07.11.14 21:17 Borneq
Najnowsze wątki z tej grupy
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
Najnowsze wątki
- 2024-11-21 Re: Dla mr. J.F`a, Trybuna i Wiesiaczka którzy "troszczą" się o państwowe i u których 0 pragmatyzmu
- 2024-11-21 Re: Dla mr. J.F`a, Trybuna i Wiesiaczka którzy "troszczą" się o państwowe i u których 0 pragmatyzmu
- 2024-11-21 Re: Dla mr. J.F`a, Trybuna i Wiesiaczka którzy "troszczą" się o państwowe i u których 0 pragmatyzmu
- 2024-11-20 "betamaxy" i inne voip-y dzisiaj
- 2024-11-21 Strach się bać
- 2024-11-21 Koniec smrodów
- 2024-11-20 Krematorium
- 2024-11-20 Taki tam szkolny problem...
- 2024-11-20 LIR2032 a ML2032
- 2024-11-20 SmartWatch Multimetr bezprzewodowy
- 2024-11-21 Środa Wielkopolska => Konsultant SAP <=
- 2024-11-21 Łódź => Spedytor Międzynarodowy <=
- 2024-11-21 Wrocław => Inżynier bezpieczeństwa aplikacji <=
- 2024-11-21 Kraków => Lead Java EE Developer <=
- 2024-11-21 Karlino => Konsultant wewnętrzny SAP (FI/CO) <=