» »

Aproksimacija kroga

Aproksimacija kroga

Isotropic ::

imam nek oblak tock, ki opisujejo plasc valja, ne ravno cisto gladek plasc, ampak ima na sebi se vdrtine. jaz moram ta plasc zgladiti (poravnati luknjice).
zanima me, kako naj na podlagi tega oblaka dolocim premer in sredisce valja (imenski premer bi naceloma lahko dobil, vendar bo malo trajalo - sodelavca ni trenutno).
oz. ce ne veste, mi lahko vsaj poveste, v katero smer naj gledam oz. kaksen problem je to (optimizacija, aproksimacija...).

WarpedGone ::

Najprej kup vprašanj:
Kako velik je ta oblak točk?
Je to problem, ki se ponavlja ali te zanima le enkratna rešitev kontretnega primera?
Je ta valj poljubno orientiran al je vzporeden s kako kooridinatno osjo?
Ali so točke "približno enakomerno" razpršene po plašču valja ali njihova gostota varira?
So zraven tudi točke z obeh osnovnih ploskev ali ne?

Kasneje pa morda še kaka ideja ;)
Zbogom in hvala za vse ribe

Isotropic ::

zelo velik, v bistvu gre za povrsinsko mrezo. tocne cifre ne vem na pamet, je pa vec kot 300k trikotnikov.
enkratna resitev
vzporeden je z x,y,z koord. sistemom (oz. pravokoten nanj), ki se nahaja nekje zunaj valja
so priblizno enakomerno razporejene, obstajajo pa tudi lokalna "zarisca", kjer jih je vec, a ni panike. mislim, da bo ze max. premer kroga (vdolbinice pac) zadoscal, bolj vazen mi je center oz. koord. izhodisce.
tudi tocke iz obeh ploskev so zraven, da.

Zgodovina sprememb…

WarpedGone ::

Aha, torej hitrost algoritma ni super pomembna, je pa fino če je reč še danes fertig.
Ena taka napol trotl varianta je, da naračunaš histogram razdalj med vsemi pari točk. Ranga 100 milijard operacij, če se lotiš v kakem spodobnem jeziku maš rešitev zračunano v kaki minuti.

Če veš orientacijo valja i.e. s katero kooridatno osjo je vzporedna tvornica valja (premica ki gre skozi središči obeh osnovnih ploskev) potem najprej vsem točkam to koordinato pribiješ na 0 (če je recimo tvornica vzporedna z Z osjo potem vse točke [x,y,z] preslikaš v [x,y,0]).
Tem preslikanim koordinatam naračunaš medsebojne razdalje in jih hraniš v histogram. Premer valja bo malo manj kot največja odaljenost dveh tako preslikanih točk - problem ti dela lokalni relief na plašču valja, zato upoštevaš še količino točk, na posamezni razdalji. Okrog pravega premera bo bistveno večje število točk, kot pa na samem maksimumu, na katerega je vplival relief.

Če točne orientacije valja ne poznaš lahko vseeno vzameš isto metodo s to razliko, da moraš ugibat orientacijo. Ko jo boš uganu boš dobil en lep maksimum, ko pa jo boš falil (valj boš preslikal v pravokotnik) boš dobil pa dva taka neizrazita maksimuma.

Če os valja ni vzporedna z nobeno koordinatno osjo, ta metoda seveda propade.
Zbogom in hvala za vse ribe

redo ::

Če te prav razumem, hočeš izluščit parametre valja ("pofitat" valj na te točke). Če zapišeš funkcijo valja v obliki f(x,y,z;vektor_parametrov)=0, se pravi, da za točko x,y,z ki leži na površini valja s parametri vektor_parametrov (pozicija, orientacija, velikost) velja prejšnje, potem lahko verjetno nažicaš kak lsqnonlin od MATLABa, da ti to reši. Čeprav za n*100k točk ne vem, kako bo delovalo (ker bi moral zgenerirati tudi toliko funkcij: f1=f(x1,y1,z1,parametri), f2=f(x2,y2,z2,parametri), ...). Razen, če obstaja še kaka optimizacija kje, ali pa če jo sam spišeš. Ideja pač.

WarpedGone ::

Verjetno ne nucaš več ampak vseeno. Prej mi je kapnilo dam sm zadevo čist preveč zakompliciral. Edin predpogoj je, da so osi valja vzporedne s koordinatnimi osmi prostora i.e. da sta osnovni ploskvi vzporedni z eno ravnino. Postopek je da greš čez vse točke, ki jih maš in naračunaš Xmin,Xmax, Ymin,Ymax in Zmin,Zmax. Za 300k trikotnikov maš to zračunano praktično takoj. Nato zračunaš tri razlike med max in min za X,Y in Z.

Tisti dve vrednosti, ki se najmanj razlikujeta med sabo sta premer valja, tista ki se pa bolj razlikuje od ostalih dveh je pa višina valja. Ker maš nekaj šuma, lahko vzameš povrečje obeh podobnih vrednosti, da se pomakneš bliže pravi vrednosti.
Zbogom in hvala za vse ribe

Isotropic ::

sodelavec mi je dal tole matlab funkcijo:
function   [xc,yc,R,a] = circfit(x,y)
%
%   [xc yx R] = circfit(x,y)
%
%   fits a circle  in x,y plane in a more accurate
%   (less prone to ill condition )
%  procedure than circfit2 but using more memory
%  x,y are column vector where (x(i),y(i)) is a measured point
%
%  result is center point (yc,xc) and radius R
%  an optional output is the vector of coeficient a
% describing the circle's equation
%
%   x^2+y^2+a(1)*x+a(2)*y+a(3)=0
%
%  By:  Izhak bucher 25/oct /1991, 
x=x(:); y=y(:);
a=[x y ones(size(x))]\[-(x.^2+y.^2)];
xc = -.5*a(1);
yc = -.5*a(2);
R  =  sqrt((a(1)^2+a(2)^2)/4-a(3));

whatever ::

Polinomska interpolacija ploskev, Hermitova bikubična ploskev ali Fergusonova ploskev is the answer. Na kratko: Najprej vse točke spraviš v kocko (0,0,0) (1, 1, 1). Torej, min x=0, max x=1; min y=0, max y=1; min z=0, max z=1. Če imaš npr. 10.000 točk zgolj v smeri osi x, bo najbolj leva točka imela koordinato npr. x=0.0001, torej boš interval x [0,1] razdelil na desettisočine. Enako narediš v smeri osi y in v smeri osi z. Nato vse točke v oblaku točk povežeš z daljicami, s čimer dobiš kontrolno mrežo, kateri se bo interpolirana ploskev prilagodila (šla bo skozi vse te točke) nato pa s pomočjo bodisi Hermitove bodisi Fergusonove ploskve interpoliraš to kontrolno mrežo. Nakar lahko posamezne točke iz tega oblaka točk premikaš, in ploskev se bo tvojemu premikanju točk avtomatsko prilagajala, tako da boš lahko zgladil vdolbine plašča stožca.

Priporočam knjigo Nikola Guid: Računalniška grafika, 2001, stran 233, 234, 235. Točno to kar ti iščeš, elegantnejše in pravilnejše rešitve ni.
Veliko jih je notri, še več jih je pa zunaj.
Bilijarde v šole! - Ivan Kramberger
Abnormal behaviour of abnormal brain makes me normal.

Zgodovina sprememb…

  • spremenilo: whatever ()

Isotropic ::

kako naj pa ugotovim, na kateri povrsini se nahaja trikotnik (plasc, zgoraj, spodaj)? problem mi predstavljajo predvsem tiste povrsine, ki so deljene na plascu in osnovni ploskvi.
metoda z normalami ni ravno zanesljiva za vse vdolbinice, kaj boljsega mi pa se ni ratalo pogruntati (zdaj sicer nekaj razmisljam, da bi za vsako tocko pogledal abs. razdaljo do plasca/ osn ploskve in na podlagi tega, kera je najmanjsa, sklepal, kam moram tocko premakniti - na obod ali osn. pl.; tako mi sploh nebi bilo treba prepoznat, kaj je kje).

problem je nekako tak, samo da je povrsinska mreza in da so pac vdolbinice




podobno kot tole, sam da je pac valj. morem reci, da sem ze cisto ;((

Zgodovina sprememb…

whatever ::

Narediš interaktivno Hermitovo ali Fergusonovo interpolacijsko ploskev in projekcijo, pol pa premikaš kontrolne točke iz oblaka, kamor pač želiš, dokler ne dobiš popolnega valja?
Veliko jih je notri, še več jih je pa zunaj.
Bilijarde v šole! - Ivan Kramberger
Abnormal behaviour of abnormal brain makes me normal.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Smiselnost integralov s drugim diferencialom (strani: 1 2 )

Oddelek: Šola
919966 (8526) Unknown_001
»

Izračun normale v C++ in povezava z Excelom

Oddelek: Programiranje
141522 (1172) primoz4p
»

Razdalja med kroglo in stožcem

Oddelek: Programiranje
203092 (2419) jernejl
»

pomoč pri linearni algebri

Oddelek: Šola
63186 (3037) whatever
»

Mehanika, kinetika

Oddelek: Znanost in tehnologija
222348 (1954) Thomas

Več podobnih tem