Gönderen Konu: for loop döngüleri  (Okunma sayısı 1521 defa)

for loop döngüleri

« : 25.02.2015 01:25:28 »
Hızlı düğmeleri aç

yeter

İleti: 2

Çevrimdışı
  • *
  • Newbie
    • Profili Görüntüle
Arkadaşlar Merhaba
Ben en sonunda dediğim şeyi yaptım İstediğim noktaları 3 ayrı gruba ayırdım
Şimdi o 3 ayrı grubun herbirinden birer nokta seçip bunların çember oluşturum oluşturmadığını ve oluşturulan bu çemberin merkezinin 180 180 den geçip geçmediğini bulmam lazım eğer geçiyorsa ekrana yazdırıcam yani bu şartlara uygun çember bulmam lazım Bunu yapabilmem için üç adet for döngüsü oluşturmam lazım ve sonrada bu şartı sağlayan if yazmam lazım Ama sorun şu ben bu for döngülerinin içine bu grupları nasıl atayabilirim dizilerin adıyla atamam lazım ama üç grupta da dizinin adı aynı biraz kafam karıştı Kodumu buraya koyacağım yardım ederseniz sevinirim anca buraya kadar gelebildim
Kod: [Seç]
#include <iostream>
#include <iostream>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/contrib/contrib.hpp"
#include <vector>
#include <stdio.h>
#include <algorithm>
using namespace std;
using namespace cv;
struct Koordinat {
        int x;
        int y;
};
int main()
{
        int const r1 = 50, r2 = 73, r3 = 15;
        std::vector<Koordinat> cember1, cember2, cember3;
 
        Mat image = imread("C:\\OpenCv2.4.6\\6.png");
 
        int ikiBoyutKarsilastirDizi[100][2] = {};
        int atlananKoordinatlar[100][2] = {};
        cv::Vec3b pixelColor(255, 255, 0);
 
        //circle( image, Point( 385, 385 ), 100.0, Scalar( 0, 0, 255 ), 1, 8 );
        //circle(image, Point(385, 385), 100, Scalar(255, 0, 0), 1, 8, 0);
 
        Vec3b color2 = image.at<Vec3b>(Point(394, 378));
 
 
        for (int i = 0; i < image.cols; ++i) {  // row la sütunun yeri  yanlış olduğu için hesaplamalar yanlıs çıkıyor...
                for (int j = 0; j < image.rows; ++j) {
                       
                        Vec3b intensity = image.at<Vec3b>(j, i);
                        uchar blue = intensity.val[0];
                        uchar green = intensity.val[1];
                        uchar red = intensity.val[2];
                        //int b = int(image.at<cv::Vec3b>(i, j)[0]);
                        //int g = int(image.at<cv::Vec3b>(i, j)[1]);
                        //int r = int(image.at<cv::Vec3b>(i, j)[2]);
                        int x = 385, y = 385;
 
                        int cember_denklemi1;
                        int cember_denklemi2;
                        int cember_denklemi3;
                        //float cember_denklemi1, cember_denklemi2, cember_denklemi3;
                        ///**/
                        //cember_denklemi1 = sqrt((i - x)*(i - x) + (j - y)*(j - y) - (r1*r1));
                        //cember_denklemi2 = sqrt((i - x)*(i - x) + (j - y)*(j - y) - (r2*r2));
                        //cember_denklemi3 = sqrt((i - x)*(i - x) + (j - y)*(j - y) - (r3*r3));
 
                        cember_denklemi1 =  (i - x)*(i - x) + (j - y)*(j - y) - (r1*r1);
                          cember_denklemi2 = (i - x)*(i - x) + (j - y)*(j - y) - (r2*r2);
                        cember_denklemi3 = (i - x)*(i - x) + (j - y)*(j - y) - (r3*r3);
                        int sayac = 0;
 
               
                        if (cember_denklemi1 >=0 && cember_denklemi1 <=300&&(blue&&red&&green>0))
                        {
                               
                               
                                image.at<Vec3b>(Point(i, j)) = pixelColor;
                               
               
 
                               
                                //Vec3b color = image.at<Vec3b>(Point(i, j));
                                cout << "gelen koordinat : " << i << " " << j << endl;
                                if (ikiBoyutKarsilastirDizi[0][0] == 0)
                                        //eğer dizinin içi boş ise vektörü ata. i ve j yi göster.
                                {
                                        ikiBoyutKarsilastirDizi[0][0] = i;
                                        ikiBoyutKarsilastirDizi[0][1] = j;
                                        cout << "KIRMIZI" << i << " " << j << endl;
                       
                                //      image.at<Vec3b>(Point(i, j)) = color2;
                                }
                                else
                                {
                                        for (int z = 0; z<100; z++)//dizinin büyüklüğü 100 olduğu için.
                                        {
                                                if (ikiBoyutKarsilastirDizi[z][0] != 0 && ikiBoyutKarsilastirDizi[z][1] != 0)
                                                {
                                                       
/* 287 365 yüzünden and or oldu */if (abs(ikiBoyutKarsilastirDizi[z][0] - i) >= 5 || abs(ikiBoyutKarsilastirDizi[z][1] - j) >= 5) // eğer daha önce diziye atanmış vektörün x ve y'si yeni eklenmeye çalışan vektörün x ve y' sinden 5 fazla yada eksik mi kontrolü. abs'ın amacı -3 yada -2 çıkma durumunda olayı kurtarmak.
                                                        {
                                                               
                                                                sayac = z;
                                                       
                                                        }
                                                        else
                                                        {
                                                               
                                                                sayac = -1;
                                                                break;
                                                        }
                                                }
                                        }
                                       
                                        if (sayac != -1)
                                        {
                                               
                                                ikiBoyutKarsilastirDizi[sayac + 1][0] = i;
                                                ikiBoyutKarsilastirDizi[sayac + 1][1] = j;
                                                cout << "KIRMIZI" << i << " " << j << endl;
                                       
                                        }
                                        else //atlanan koordinat buraya düşecek.
                                        {
                                                cout << "atlanan koordinat: " <<i << " " << j << endl;
                                               
                                        }
 
                                }
                        }
                        int sayac2=0;
                         if (cember_denklemi2 >=0 && cember_denklemi2 <=300&&(blue&&red&&green>0))
                        {
                               
                               
                                image.at<Vec3b>(Point(i, j)) = pixelColor;
                               
               
 
                               
                                //Vec3b color = image.at<Vec3b>(Point(i, j));
                                cout << "gelen koordinat1 : " << i << " " << j << endl;
                                if (ikiBoyutKarsilastirDizi[0][0] == 0)
                                        //eğer dizinin içi boş ise vektörü ata. i ve j yi göster.
                                {
                                        ikiBoyutKarsilastirDizi[0][0] = i;
                                        ikiBoyutKarsilastirDizi[0][1] = j;
                                        cout << "BUYUK" << i << " " << j << endl;
                       
                                //      image.at<Vec3b>(Point(i, j)) = color2;
                                }
                                else
                                {
                                        for (int z = 0; z<100; z++)//dizinin büyüklüğü 100 olduğu için.
                                        {//0 0 geldiğinde 5 ten büyük gözüktüğü için dahil ediyor 0'lar için özel bir şey lazım.
                                                if (ikiBoyutKarsilastirDizi[z][0] != 0 && ikiBoyutKarsilastirDizi[z][1] != 0) // birinci yada ikinci değer 0 değilse aramaya devam et.
                                                {
                                                       
/* 287 365 yüzünden and or oldu */if (abs(ikiBoyutKarsilastirDizi[z][0] - i) >= 5 || abs(ikiBoyutKarsilastirDizi[z][1] - j) >= 5)
                                                        {
                                                               
                                                               
                                                                sayac2 = z;
                                                       
                                                        }
                                                        else
                                                        {
                                                               
                                                                sayac2 = -1;
                                                                break;
                                                        }
                                                }
                                        }
                                        //bütün değerlerin kontrolü yapıldıktan sonra eleman eklenmeli ve gösterilmeli.
                                        if (sayac2 != -1)
                                        {
                                               
                                                ikiBoyutKarsilastirDizi[sayac2 + 1][0] = i;
                                                ikiBoyutKarsilastirDizi[sayac2 + 1][1] = j;
                                                cout << "BUYUK" << i << " " << j << endl;
                                       
                                        }
                                        else //atlanan koordinat buraya düşecek.
                                        {
                                                cout << "atlanan koordinat1: " <<i << " " << j << endl;
                                               
                                        }
 
                                }
                        }
                        int sayac3=0;
                       
                        if (cember_denklemi3 >=0 && cember_denklemi3 <=300&&(blue&&red&&green>0))
                        {
                               
                               
                                image.at<Vec3b>(Point(i, j)) = pixelColor;
                               
               
 
                               
                                //Vec3b color = image.at<Vec3b>(Point(i, j));
                                cout << "gelen koordinat2 : " << i << " " << j << endl;
                                if (ikiBoyutKarsilastirDizi[0][0] == 0)
                                        //eğer dizinin içi boş ise vektörü ata. i ve j yi göster.
                                {
                                        ikiBoyutKarsilastirDizi[0][0] = i;
                                        ikiBoyutKarsilastirDizi[0][1] = j;
                                        cout << "KUCUK" << i << " " << j << endl;
                       
                                //      image.at<Vec3b>(Point(i, j)) = color2;
                                }
                                else //dizinin ilk elemanı atanmış ise karşılaştırma yap 5 fark kuralına uygunsa diziye ekle, uygun değilse vektörü atla. Atladıysan vektörü gösterme atlamadıysan vektörü göster.
                                {
                                        for (int z = 0; z<100; z++)//dizinin büyüklüğü 100 olduğu için.
                                        {//0 0 geldiğinde 5 ten büyük gözüktüğü için dahil ediyor 0'lar için özel bir şey lazım.
                                                if (ikiBoyutKarsilastirDizi[z][0] != 0 && ikiBoyutKarsilastirDizi[z][1] != 0) // birinci yada ikinci değer 0 değilse aramaya devam et.
                                                {
                                                       
/* 287 365 yüzünden and or oldu */if (abs(ikiBoyutKarsilastirDizi[z][0] - i) >= 5 || abs(ikiBoyutKarsilastirDizi[z][1] - j) >= 5) // eğer daha önce diziye atanmış vektörün x ve y'si yeni eklenmeye çalışan vektörün x ve y' sinden 5 fazla yada eksik mi kontrolü. abs'ın amacı -3 yada -2 çıkma durumunda olayı kurtarmak.
                                                        {// Doğruysa,atlamadığımız için karşılaştırma dizisine ata,göster.
                                                                //sürekli olarak 1'e yada 0 a kaydediyor dizideki ilk 0 indisini bul demek lazım.iptal kontrolü dışarı çıkar.
                                                               
                                                                sayac3 = z;
                                                       
                                                        }
                                                        else
                                                        {
                                                               
                                                                sayac3 = -1;
                                                                break;
                                                        }
                                                }
                                        }
                                        //bütün değerlerin kontrolü yapıldıktan sonra eleman eklenmeli ve gösterilmeli.
                                        if (sayac3 != -1)
                                        {
                                               
                                                ikiBoyutKarsilastirDizi[sayac3 + 1][0] = i;
                                                ikiBoyutKarsilastirDizi[sayac3 + 1][1] = j;
                                                cout << "KUCUK" << i << " " << j << endl;
                                       
                                        }
                                        else //atlanan koordinat buraya düşecek.
                                        {
                                                cout << "atlanan koordinat2: " <<i << " " << j << endl;
                                               
                                        }
 
                                }
                        }
                       
                }
        }
        imshow("Image", image);
        int k = waitKey();
           imwrite("5.jpg", image);
        //waitKey( 0 );
        return(0);
}
Ya nasıl yapabileceğimi tahmin edebiliyorum fakat bazen içini edoldurmakta zorlanıyorum