Herkese merhaba arkadaşlar. Proje ödevim var ve günlerdir kitlendim kaldım. Kullanıcıdan alınan noktaları kapsayan bir minimum çember çizilmesi isteniyor. C proglamlama kullanılacak ve graphics.h. Çemberin algoritamasını matematiğini nasıl kurabilirim hiç fikri olan var mı acaba? |
C ve graphics.h kullanarak minimum çember çizmek
-
-
Çember matematiği cos ve sin fonksiyonlarına pi ve radyan değerlerini vererek oluşturursun.
glBegin(GL.GL_LINE_LOOP); for(int i =0; i <= 300; i++){ double angle = 2 * Math.PI * i / 300; double x = Math.cos(angle); double y = Math.sin(angle); gl.glVertex2d(x,y); } glEnd();Kod
Yığını:Üstteki örneği StackOverflow'dan aldım. OpenGL kütüphanesine ait. Yaptığı şey kısacası çember şeklinde 300 tane nokta oluşturmak. Daha sonra GL_LINE_LOOP'un yapısı gereği bunlar art arda birbirine bağlanır ve çember olmuş olur.
Peki graphics kütüphanesinde hazır çember fonksiyonu yok mu?
not:
< Bu mesaj bu kişi tarafından değiştirildi requizm -- 6 Kasım 2020; 22:18:48 >
-
Nokta sayısı nedir? Tahminen 3 noktadan fazla örneğin 4 nokta verilirse o 4 noktadan geçecek çember çizmek imkansız olabilir. .
< Bu ileti mini sürüm kullanılarak atıldı > -
noktaların çember üzerinde olması şart değil. içinde de kalabilir. sınırsız nokta girebilir kullanıcı isterse hocam.
-
var hocam circle fonksiyonu kullanılıyor. ama aslında grafik kütüphanemden çok bana verilen noktaları kapsayan minimum çemberin algoritmasını kafamda oturtamıyorum.
-
O zaman en uzak 2 nokta çap olacak şekilde bir çember çizmek yeterli olabilir cunku diger tüm noktaları içine alır. Yani soru öyleyse soru birbirine en uzak 2 noktayı bulma algoritması yazmak ve o 2 nokta çap olacak şekilde BGI (graphics.h) ile çember çizdirmekten ibaret olabilir.
< Bu ileti mini sürüm kullanılarak atıldı > -
up
-
Soru çok açıklayıcı değil. İki senaryo için farklı çözümler olur.
Çember 1 veya 2 noktayı rasgele içerebilir, bundan fazlasını içermesi için şartlı çözüm yapmamız gerekiyor. Diyelim n girdi oldu kullanıcı tarafından. n = 3 için çözüm yapmaya kalkarsak ilk 1 ve 2 noktayi içeren teğetin oluşturduğu çemberin yarıçapını 3. noktayı içerecek şekilde uyarlayabiliriz. 3 den büyük değerler için aklıma bir çözüm gelmiyor şuanda (teker teker kontrol etmek dışında).
Üç nokta için C(n, 3) kombisyonu kadar farklı çözüm elde ederiz.
Eğer en dıştaki en büyük kapsayıcı çemberin çizilmesi isteniyorsa, dış kısımda kalan 2 noktayı içerecek şekilde olursa eğer çemberin yarıçapını sonsuza kadar büyütebiliriz ve bu bütün noktaları kapsar.
< Bu mesaj bu kişi tarafından değiştirildi patatessiz patso -- 7 Kasım 2020; 18:47:21 > -
5 nokta verilmiş olsun.
Önce çemberin merkezini bulmak için tüm noktaların x ve y'lerinin ortalaması alınarak merkez noktayı buldum.
(5+5+3+2+1) / 5 = 3.2
(1+4+2+4+1) / 5 = 2.4
Merkez noktan (3.2, 2.4)
Ardından merkez noktanın diğer noktalara olan uzaklıklarını bularak, en uzak noktayı buldum.
Kullandığın kütüphanedeki fonksiyonu bilmiyorum fakat şuradan gördüğüm kadarıyla. (https://www.geeksforgeeks.org/draw-circle-c-graphics/)
Merkez nokta ve en uzak noktanın mesafesini verirsen, en uzak nokta üzerinden geçen ve tüm noktaları kapsayan çemberi çizmiş olursun.
Üstünden geçmesin istiyorsan 1-2 pixel daha uzatırsın yarıçapını.
// C Implementation for drawing circle #include <graphics.h> //driver code int main() { // gm is Graphics mode which is // a computer display mode that // generates image using pixels. // DETECT is a macro defined in // "graphics.h" header file int gd = DETECT, gm; // initgraph initializes the // graphics system by loading a // graphics driver from disk initgraph(&gd, &gm, ""); // circle function circle(ort_x, ort_y, en_uzak_nokta_mesafesi); getch(); // closegraph function closes the // graphics mode and deallocates // all memory allocated by // graphics system . closegraph(); return 0; }Kod
Yığını:
< Bu mesaj bu kişi tarafından değiştirildi overpSkpt -- 8 Kasım 2020; 18:34:10 >
-
hocam evet bu noktaları kapsıyor evet ama minimum çevreleyecek şekilde çizilmesi bekelniyor. senin algoritmadaki çember minimum olmuyor
-
c dili ile ilgili daha fazla bilgi için https://www.ogretmentercihim.com/blog/c-programlama-dili
-
forumla ilgilenen yok mu? utanmaz elemanlar kendi dandik sitelerini atıyorlar alakalı alakasız yerlere, ödev isteyenler gelen cevaplardan direkt kopyala yapıştır yapacağı yoksa cevap bile vermiyor, büyük ihtimal anlamıyor, yazık forumun hali kötü gibi.
Bu mesaj IP'si ile atılan mesajları ara Bu kullanıcının son IP'si ile atılan mesajları ara Bu mesaj IP'si ile kullanıcı ara Bu kullanıcının son IP'si ile kullanıcı ara
KAPAT X