(05-03-2024, 07:54 PM)misamilanovic Wrote: Evo ti rešenje ako sam ja uopšte dobro razumeo šta se traži, i ako nisam pogrešio, ali proveravao sam na nekoliko primera. Ako je stranica većeg kvadrata a, manjeg a', poluprečnik spoljnog kruga r i poluprečnik unutrašnjeg kruga r' onda je r' = (2r - a + a') / 2. Ako počneš da dobijaš negativne rezultate za r', to znači da mu centar pada između dva kvadrata. Npr. upravo ono što si zadao (a = 100, a' = 90, r = 2,5) daje negativan rezultat.
Sve dok je taj medjuprostor {(a - a')/2} > r, onda se za r' dobiva taj negativan rezultat,
što zapravo znači da bi trebali "dodat" na unutrašnji kvadrat neki imaginarni r,
jer u samom uglu imamo veče rastojanje, pa zapravo netreba uopšte obarati unutrašnje ivice.
05-03-2024, 09:49 PM (This post was last modified: 05-03-2024, 09:56 PM by savan.)
U SolidWorks crtam, u njemu to resavam jednostavno sa par dodatnih linija kao na slici nije to problem nego cisto me zanima matematicko resenje : ) Korisno je kada bi se crtalo preko programskog jezika bez upotrebe neke biblioteke pa pisalo na ekran
Edit: hvala misamilovanovic! Razotricu sutra prakticno u SolidWorks dali ce rezultat biti ok na nekom primeru sto budem nacrtao
ne znam jesam li dobro shvatio problem,ali zar nije manji radijus zapravo veliki umanjen za taj međuprostor? (oba radijusa počinju iz iste tačke )
kako drugačije dobiti jednako rastojanje između ta dva tela?
05-04-2024, 10:57 AM (This post was last modified: 05-04-2024, 11:00 AM by savan.)
Nisu isti radijusi na spoljnom i na unutrasnjem kvadratu u tome je caka, to sam otkrio tek kada sam crtao na onoj diy kamerici kada sam pravio zid kutije da radijsi nisu isti, ako je na primer spoljni radisus lupicu 5mm a debljina zida se zeli 2mm, unutrasnji radijus nije 5mm manji je. Stavi shestar iglu na Mt tacku vidices da je manji poluprecnik. I to sad na primer kada se crta u programskom kodu za ispisivanje na ekran i bez upotrebe neke biblioteke onda tu mora matematika da se ukjluci : )
05-04-2024, 11:37 AM (This post was last modified: 05-04-2024, 11:42 AM by savan.)
(05-03-2024, 07:54 PM)misamilanovic Wrote: Evo ti rešenje ako sam ja uopšte dobro razumeo šta se traži, i ako nisam pogrešio, ali proveravao sam na nekoliko primera. Ako je stranica većeg kvadrata a, manjeg a', poluprečnik spoljnog kruga r i poluprečnik unutrašnjeg kruga r' onda je r' = (2r - a + a') / 2. Ako počneš da dobijaš negativne rezultate za r', to znači da mu centar pada između dva kvadrata. Npr. upravo ono što si zadao (a = 100, a' = 90, r = 2,5) daje negativan rezultat.
NIje ovo dobra formula tj nije forula za poluprecnik sa Mt tacke. Na primer razdaljinu od centra do Mt tacke moze da se izracuna ako se zna poluprecnik oborene ivice koji je 2.5mm, jednostavno se oduzme od poludijagonale r0 - 2.5mm da se dobije distanca Mt od centra kvadrata, i sa distance Mt poznat je poluprecnik spoljne oborene ivice koji smo fiksirali na 2.5mm. Takodje sada se zna i pozicija Mt tacke. E sad sa pozicije Mt treba izracunati poluprecnik oborene ivice na manjem kvadratu. Mislim da treba da se izracuna poludijagonala manjeg kvardrata pa da se oduzme dijagonala veceg kvadrata i dijagonala manjeg kvadrata i onda tu nesto dodatno saberere-oduzme sa ovom poznatom jedinicom poluprecnika 2.5mm
05-04-2024, 12:30 PM (This post was last modified: 05-04-2024, 12:41 PM by savan.)
Evo kako to izgleda u SolidWorks, postavio sam spoljni kvardrat 100x100 a unutrasnji 90x90, oborena spoljna ivica je poluprecnika 9mm, u programu dobijam da je 4mm unutrasnji poluprecnik oborene ivice, kako to izracunati matematicki da se dobije rezultat = 4mm nemam ideju : )
i kad se uklone sve te silne linije viska unutrasnji poluprecnik savrseno prati spoljni poluprecnik i medjuprostor je savrseno jednak svuda unaokolo
05-04-2024, 12:47 PM (This post was last modified: 05-04-2024, 12:48 PM by Dragan100.)
(05-04-2024, 12:30 PM)savan Wrote: Evo kako to izgleda u SolidWorks, postavio sam spoljni kvardrat 100x100 a unutrasnji 90x90, oborena spoljna ivica je poluprecnika 9mm, u programu dobijam da je 4mm unutrasnji poluprecnik oborene ivice, kako to izracunati matematicki da se dobije rezultat = 4mm nemam ideju : )
i kad se uklone sve te silne linije viska unutrasnji poluprecnik savrseno prati spoljni poluprecnik i medjuprostor je savrseno jednak svuda unaokolo
Pa zar nije:
-medjuprostor d=5
-r_van = 9
r_un = r_van - d, a centar imaju zajednički oba r_x
05-04-2024, 12:48 PM (This post was last modified: 05-04-2024, 12:58 PM by savan.)
Ne mogu da verujem da je tako jednostavno, bravo Dragane! Ja bi tu ko zna sta delio, mnozio, sabirao, oduzimao i opet nebi izracunao, gledam u totalno pogresnom smeru : )
05-04-2024, 01:04 PM (This post was last modified: 05-04-2024, 01:08 PM by Dragan100.)
(05-04-2024, 12:48 PM)savan Wrote: Ne mogu da verujem da je tako jednostavno, bravo Dragane! Ja bi tu ko zna sta delio, mnozio, sabirao, oduzimao i opet nebi izracunao, gledam u totalno pogresnom smeru : )
Pa sitnica!
Nego, kad bi ti odmah dao tu sliku iz SldWorks-a,
rešili bi te davno prije 10+ postova... a tako nas vrtiš u krugu!!!
:-)
Ja sam bio siguran da ti radi problem taj r_un, kad je medjuprostor d veči od njega: r<d
što ti je i @misamilanovic ponudio, i obrazložio taj rezultat negativnog predznaka...
05-04-2024, 01:09 PM (This post was last modified: 05-04-2024, 01:11 PM by savan.)
Tesko mi je prvo da objasnim to sto mi se nalazi u glavi, prvo sam sa sobom... pa onda svaka cast onom ko je uspeo da razume sta je pesnik hteo da kaze : )
Pitao sam ChatGTP za te "rounded-corners" jer znam šta je Savan pitao, odnosilo se na iscrtavanje u kompjuterskoj grafici generalno jer ispada da jeste problem i ima nekih specifičnih caka pored osnovne matematike.
Maltretirao sam ChatGTP da mi napravi kvadrat sa zaobljenim ivicama i pošto se generalno radi o kompjuterskoj grafici terao sam ga da mi napravi u JavaScrip ali diskretnu implementaciju sa tačkama i linijama, pokušavao sam 15 puta, te ovako, te onako, dva-tri sata sam se mlatio sa njim, davao je neke krivulje umesto "zaobljenja", hteo sam da razbijem i tastaturu i njega koliko je retardirano glup CharGTP, zaglupi se da ne može da podeli dva broja, još ako su sa float-point, ma kakvi, Hewlett Packard Calculator je za njega misaona imenica kada se dodje do matematike gde se GTP zaglupi vrlo lako.
Od nekih 15 kombinacija, samo su dve davale tačne rezultate i to samo kada se koristila arcTo() ili arc() funkcija za crtanje ivica i klasične lineTo() funkcjie za linije.
I pokušavao sam XY puta da mu kažem da je to super samo da mi sad razradi i da rešenje samih arcTo() i arc() funkcija, 2*Pi/nešto ... i ne može i ne može i ne može ... i "pretio" samu da cu da ga "tužim kod autora da ga isključe" i ajd ponovo i ponovo ...
I nije znao da napravi! Kreten ... j*** ChatGTP ....
05-04-2024, 09:10 PM (This post was last modified: 05-04-2024, 09:15 PM by mikikg.)
BTW: Stvar je u tome što "arc" ili "deo kružnice" u kompjuterskoj grafici ne može da se definiše ili iscrtati preko jedne funkcije, mora da ima više segmenata tj "vertexa" koji iscrtavaju ustvari linije i duzine tih linija direktno utiču na "finoću" zaobljenja.
Zamisli da imaš 0-90*deg polu-kružnicu, može da se predstavi "grubo" sa na primer 10 nekih linija podljenje u koracima od po 9*deg, može još finije sa 100, 1000, sa praktično bezbroj ako radimo u nekom ogromnom vektorskom prostoru pda da se pri nekim velikim zoom i dalje vidi "fino" zaobljenje i tako praktično u krug, što je "finije" to više memorije zauzima i sporije radi (u vektorskoj formi, vertexi).
Kada se radi sa fiksnim rezolucijama ekrana i generalno 2D grafikom, radi se ista stvar samo je poznat limit tih linija a to je ustvari jedan pixel, ne može da se ide ispod tog limita i onda se ceo matematički račun limitira na osnovu tih parametara i tako se pixel-po-pixel složi na svoje mesto da napravi taj 0-90*deg "izgled" sa pojedinačnim pixelima.
BTW2: Za iscrtavanje linija pixel-po-pixel se koristi standardno "Bresenham's line algorithm"
BTW3: Postoje "dodaci" za oba algoritma koji se tiču "ulepšavanja" prikaza sa dodavanjem pixela svetlije boje pa napravi lep "smoting" da ne bude "krzav" prikaz. Obično to ostave da radi GPU preko fragemt shejdera.
05-04-2024, 09:53 PM (This post was last modified: 05-04-2024, 09:54 PM by mikikg.)
BTW4: Zaboravih, neophodno je da se izračuna OBIM tog "arc", zato je bitna stavka da se zna poluprečnik jer se za isti ugao pri različitom poluprecniku menja obim a obim (u pixelima) je neophodan da bi se izračunao broj iteracija sa kojima da nacrta tačke, prakticno linije ali duzine 1px.
Naterao sam ovo sokoćalo da napravi ispravan code, ovde se vidi osnova za crtanje kruga sa početnim i krajnjim uglom.
Dalje može da se napravi funkcija (alias) koja crta 4 ćoška (gornj-levi, gornji-desni, donji-levi i donji-desni) i da se ona spoji sa funkcijom za crtanje zaobljenog pravougaonika gde imaš "r" kao prečnik za crtanje što je istovremeno i "offset" sa kojim moraš da pomeriš početak/kraj linija i sto toliko se pomera centar odakle se icrtava sam "ćošak".
Dakle tu je bitna matematika sinus/cosinus koji treba da se izračuna ali se često to "pre-izračuna" i postavi u lookup-tablice zbog brzine izvršavanja i eventulano ono deljenje sa 1 / r se stavi isto u tablice jer ima neki konačan broj rezultata tako da se onda celo iscrtavanbje može bazira na prostim i brzim funkcijama bez upotrebe floating-point modula i instrukcija.
(05-04-2024, 08:11 AM)HomeMadeAudioProject Wrote: ne znam jesam li dobro shvatio problem,ali zar nije manji radijus zapravo veliki umanjen za taj međuprostor? (oba radijusa počinju iz iste tačke )
kako drugačije dobiti jednako rastojanje između ta dva tela?
(05-04-2024, 12:47 PM)Dragan100 Wrote:
(05-04-2024, 12:30 PM)savan Wrote: Evo kako to izgleda u SolidWorks, postavio sam spoljni kvardrat 100x100 a unutrasnji 90x90, oborena spoljna ivica je poluprecnika 9mm, u programu dobijam da je 4mm unutrasnji poluprecnik oborene ivice, kako to izracunati matematicki da se dobije rezultat = 4mm nemam ideju : )
i kad se uklone sve te silne linije viska unutrasnji poluprecnik savrseno prati spoljni poluprecnik i medjuprostor je savrseno jednak svuda unaokolo
Pa zar nije:
-medjuprostor d=5
-r_van = 9
r_un = r_van - d, a centar imaju zajednički oba r_x
05-05-2024, 06:36 AM (This post was last modified: 05-05-2024, 08:07 AM by savan.)
Zanimljivo je crtanje u programskom kodu, ja sam one moje round dugmice u onoj prvoj diy lemilici sa touch screen radio sa necim sto retko ko radi, ne libgdx nego libgd, morao sam sve graficke biblioteke od libjpeg, libtiff, libpng, ... da kompilujem da bi mogao da kompilujem libgd i onda sam tako po secanju na php preveo to u C i uspeo na kraju krajeva da crtam, pisem na nivou kako se to radi u php, sve slike sam generisao pre samog main loop i smestio u memoriju, dugme u boji sa oborenim ivicama, dugme pritisnuto druge boje... i onda ocitavao u dispmanx i nije to lose radilo moglo je i bolje, okacio sam jbc.c fajl u nekim od tema pre neki dan koga interesuje kako sam to radio : )
Moze to da se odradi i nativno bez biblioteke, samo treba poznavanje matematike za geometriju i moze to da se napravi, probacu ja to na onom kruznom displeju kad proradi i kad krenem da pravim gui trebace mi to!
Malo off topic ali bar u pravoj temi
Ja sam sve dugmiće i.. Ma u stvari sve, sve kontrole crtao native od nule, nešto uz pomoc matematike nešto uz pomoć pripremljenih slika. I sada ponekad koristim tu moju biblioteku, jer je poznajem i lako mogu prilagoditi bas kako mi treba
Ali iskreno tu svaka prednost prestaje.
Svi kuvaju sa istom vodom, svi rade isto, npr.. emwin ili lvgl, touchgfx.. i mislim da nema smisla ponavljati sve od nule. Ako je u pitanju neki embedded system, ja bih sada prvo pokrenuo lvgl. Čisto da probam. I kako je open source... uvek u dokolici možeš krenuti da optimizujes ono što ti treba...