C/c++ dilinde ekrana kordinant sistemi çizdirmek

Furkannnn

Kilopat
Katılım
8 Mayıs 2015
Mesajlar
50
Daha fazla  
Cinsiyet
Erkek
Merhaba C dili kullanarak ekrana koordinat sistemi çizmek istiyorum X ve Y olmak üzere. Herhangi bir noktaya tıkladığımda da o yeri noktalama yapmasını istiyorum. Bunu nasıl yapabilirim?
 
Son düzenleyen: Moderatör:
Vs Code ' da (yada hangi uygun platform varsa onda) yapmak istiyorum ekrana kordinat sistemi çizip üstüne tıkladığımda kordinat değerlerini veren bir program ve bu programı arduino ile beraber kullanmak istiyorum bir tabla yapıp ekranda işaretlediğim yere tablayı hareket ettirmek istiyorum.
Bu bu proje gerçekten de zor mudur?
 
VS Code'da (ya da hangi uygun platform varsa onda) yapmak istiyorum ekrana koordinat sistemi çizip üstüne tıkladığımda koordinat değerlerini veren bir program ve bu programı Arduino ile beraber kullanmak istiyorum bir tabla yapıp ekranda işaretlediğim yere tablayı hareket ettirmek istiyorum.
Bu bu proje gerçekten de zor mudur?

Seri haberleşme yapmanız gerekiyor uğraşırsanız o kadar da zor değil Arduino forumunda İngilizce bir şekilde konu açmanızı öneririm orada daha iyi bir yanıt alırsınız.
 
Vs Code ' da (yada hangi uygun platform varsa onda) yapmak istiyorum ekrana kordinat sistemi çizip üstüne tıkladığımda kordinat değerlerini veren bir program ve bu programı arduino ile beraber kullanmak istiyorum bir tabla yapıp ekranda işaretlediğim yere tablayı hareket ettirmek istiyorum.
Bu bu proje gerçekten de zor mudur?
Daha net bir şekilde açıklarsan fikir verebilirim.
 
Daha net bir şekilde açıklarsan fikir verebilirim.
İlk önce bir Pencere oluşturup ona koordinat sistemi çizip numaralandırmak istiyorum ve daha sonra o numaralandırdığım kısımlara basıp motor devirlerini yönetmek istiyorum ve bu sayede tabla hareketlerini sağlamak istiyorum aşağıda buna örnek bir resim var.
 

Dosya Ekleri

  • Adsız.png
    Adsız.png
    378,2 KB · Görüntüleme: 37
İlk önce bir Pencere oluşturup ona koordinat sistemi çizip numaralandırmak istiyorum ve daha sonra o numaralandırdığım kısımlara basıp motor devirlerini yönetmek istiyorum ve bu sayede tabla hareketlerini sağlamak istiyorum aşağıda buna örnek bir resim var.
Öncelikle GUI çizebilmek için birkaç kütüphaneye ihtiyacın var. Bir tanesini bul farketmez.

Sonra çizgileri çizebilmek için kendine cellSize (Her bir hücrenin boyutu) belirlemen gerekiyor. Bu sayede width / cellSize değeri sana col, height/cellSize ise row değerini belirtir. Bu col ve row değerleri kartezyen değerlerindir. (row x col)

Bunları çizdirmek için basit mantıkla;
C:
const int CELL_SIZE = 50,
          WIDTH = 800,
          HEIGHT = 600;
const int ROW_SIZE = HEIGHT / CELL_SIZE,
          COL_SIZE = WIDTH / CELL_SIZE;

int main() {
    // Burada bir sürü GUI şeyleri olur (guiInit)
    
    // Yatay Çizgi oluşturmak için;
    for(int i = 0; i<ROW_SIZE; i++) {
        // drawLine diye bişi yok. Ben uydurdum. Sen hangi GUI lib kullanıyorsan onun line methodunu kullan.
        // drawLine(int startX, int startY, int endX, int endY);
        drawLine(0, i * CELL_SIZE, WIDTH, i * CELL_SIZE);
        // Burada line number text olarak yazdırabilirsin.
        // drawText(string text, x, y);
        drawText(i, 0, i * CELL_SIZE);
    }
    // Dikey Çizgi oluşturmak için;
    for(int i = 0; i<ROW_SIZE; i++) {
        drawLine(i * CELL_SIZE, 0, i * CELL_SIZE, HEIGHT);
        drawText(i, i * CELL_SIZE, 0);
    }
}

Mouse tıklamasını almak basit. Aldığın mouse pozisyonu sana window içerisindeki yerini verecektir. Mesela koda bakarsan 800x600 window oluşturduk. Adam tam ortaya basarsa bize (400, 300) pozisyonu gelecek. Bu piksel cinsinden. Şimdi bunu kartezyen sistemine çevirelim.
Çevirme işi basit, sen CELL_SIZE değerini biliyorsun. O halde direkt buna böl :)


C:
void handleClickPoint(int x, int y) {
    // rint: round. Neye yakınsa ona yuvarlar. 0.4 = 0, 0.6 = 1
    int c = rint((double)x / CELL_SIZE);
    int r = rint((double)y / CELL_SIZE);
    // artık kartezyen sistemine göre nereye tıkladığını biliyorsun. (3, 5) gibi.
}

int main() {
    // Üstteki kodun devamı..
    // Burada kullandığın GUI lib içerisinde gelen event listener kullanman lazım. Genelde şöylee bişi olur.
    
    GUI_EVENT e;
    while(GUI_EVENT_LISTENER(&e)) {
        if(e.type == GUI_MOUSELEFT)
            handleClickPoint(e.x, e.y);
    }
}

GUI lib farketmezsizin sana kartezyen grid nasıl çizilir, mouse click olduğunda nasıl koordinatı alırsın gösterdim. Herhangi bir GUI lib kullanırsın, dediğim gibi farketmez.
 
Öncelikle GUI çizebilmek için birkaç kütüphaneye ihtiyacın var. Bir tanesini bul farketmez.

Sonra çizgileri çizebilmek için kendine cellSize (Her bir hücrenin boyutu) belirlemen gerekiyor. Bu sayede width / cellSize değeri sana col, height/cellSize ise row değerini belirtir. Bu col ve row değerleri kartezyen değerlerindir. (row x col)

Bunları çizdirmek için basit mantıkla;
C:
const int CELL_SIZE = 50,
          WIDTH = 800,
          HEIGHT = 600;
const int ROW_SIZE = HEIGHT / CELL_SIZE,
          COL_SIZE = WIDTH / CELL_SIZE;

int main() {
    // Burada bir sürü GUI şeyleri olur (guiInit)
  
    // Yatay Çizgi oluşturmak için;
    for(int i = 0; i<ROW_SIZE; i++) {
        // drawLine diye bişi yok. Ben uydurdum. Sen hangi GUI lib kullanıyorsan onun line methodunu kullan.
        // drawLine(int startX, int startY, int endX, int endY);
        drawLine(0, i * CELL_SIZE, WIDTH, i * CELL_SIZE);
        // Burada line number text olarak yazdırabilirsin.
        // drawText(string text, x, y);
        drawText(i, 0, i * CELL_SIZE);
    }
    // Dikey Çizgi oluşturmak için;
    for(int i = 0; i<ROW_SIZE; i++) {
        drawLine(i * CELL_SIZE, 0, i * CELL_SIZE, HEIGHT);
        drawText(i, i * CELL_SIZE, 0);
    }
}

Mouse tıklamasını almak basit. Aldığın mouse pozisyonu sana window içerisindeki yerini verecektir. Mesela koda bakarsan 800x600 window oluşturduk. Adam tam ortaya basarsa bize (400, 300) pozisyonu gelecek. Bu piksel cinsinden. Şimdi bunu kartezyen sistemine çevirelim.
Çevirme işi basit, sen CELL_SIZE değerini biliyorsun. O halde direkt buna böl :)


C:
void handleClickPoint(int x, int y) {
    // rint: round. Neye yakınsa ona yuvarlar. 0.4 = 0, 0.6 = 1
    int c = rint((double)x / CELL_SIZE);
    int r = rint((double)y / CELL_SIZE);
    // artık kartezyen sistemine göre nereye tıkladığını biliyorsun. (3, 5) gibi.
}

int main() {
    // Üstteki kodun devamı..
    // Burada kullandığın GUI lib içerisinde gelen event listener kullanman lazım. Genelde şöylee bişi olur.
  
    GUI_EVENT e;
    while(GUI_EVENT_LISTENER(&e)) {
        if(e.type == GUI_MOUSELEFT)
            handleClickPoint(e.x, e.y);
    }
}

GUI lib farketmezsizin sana kartezyen grid nasıl çizilir, mouse click olduğunda nasıl koordinatı alırsın gösterdim. Herhangi bir GUI lib kullanırsın, dediğim gibi farketmez.
Hocam ara vermiştim tekrar bu konuya döndüm python ile yaptım yardımcı olduğunuz için teşekkür ederim.
Orta noktaya tıkladığımda bana kordinatı pencere boyutunun yükseklik ve genişliğine göre veriyor ben tam orta noktaya tıkladığımda 0.0 yazssın istiyorum onun formulu nedir acaba ?

Formulu buldum hocam..
 

Dosya Ekleri

  • 6.png
    6.png
    139,1 KB · Görüntüleme: 18
  • 7.png
    7.png
    134,5 KB · Görüntüleme: 17
  • 1.png
    1.png
    11,6 KB · Görüntüleme: 11
  • 2.png
    2.png
    146,3 KB · Görüntüleme: 13
Son düzenleme:
Hocam ara vermiştim tekrar bu konuya döndüm python ile yaptım yardımcı olduğunuz için teşekkür ederim.
Orta noktaya tıkladığımda bana kordinatı pencere boyutunun yükseklik ve genişliğine göre veriyor ben tam orta noktaya tıkladığımda 0.0 yazssın istiyorum onun formulu nedir acaba ?

Formulu buldum hocam..
-400 ve 300'ün alanın boyu olduğunu var sayıyorum. Öyleyse eğer. Dinamik al onları. Alanın boyu değişirse noktayı yanlış hesaplar.
 

Geri
Yukarı