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?
Daha net bir şekilde açıklarsan fikir verebilirim.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?
İ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.Daha net bir şekilde açıklarsan fikir verebilirim.
Öncelikle GUI çizebilmek için birkaç kütüphaneye ihtiyacın var. Bir tanesini bul farketmez.İ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.
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);
}
}
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);
}
}
Hocam ara vermiştim tekrar bu konuya döndüm python ile yaptım yardımcı olduğunuz için teşekkür ederim.Ö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.
-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.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..
Bu sitenin çalışmasını sağlamak için gerekli çerezleri ve deneyiminizi iyileştirmek için isteğe bağlı çerezleri kullanıyoruz.