Есть прямая,которая задается координатами начала x1 y1 и координатами конца x2 y2.Прямая проходит через сетку ,разбитую на клетки. Есть программа, которая вычисляет координаты точек пересечения задаваемой прямой с массивом горизонтальных линий сетки, а потом вычисляет координаты точек пересечения задаваемой прямой с массивом вертикальных линий сетки;дальше эти два массива объединяются в один, происходит сортировка по возрастанию по x и затем наконец вычисляются длины пересечений прямой с сеткой( с квадратиками); Но надо определить позиции клеток пересечения ... Может кто в курсе как это посчитать?
Код | #include "stdafx.h" #include <iostream> #include <conio.h> #include <math.h> using namespace std; void sort(pair<double, double> coords[24]) { int n=24; pair <double, double> tmp; for (int i = 0; i < n - 1; ++i) { for (int j = 0; j < n - 1; ++j) { if (coords[j + 1].first < coords[j].first) { tmp = coords[j + 1]; coords[j + 1] = coords[j]; coords[j] = tmp; } } } }
int main() { int i;//номер верт. линии int j;//номер линии double Ny;//шаг сетки double y, x, x1, x2, y1, y2,d; cout << "Vvedite x1"; cin >> x1; cout << "Vvedite x2"; cin >> x2; cout << "Vvedite y1"; cin >> y1; cout << "Vvedite y2"; cin >> y2; cout << "shag setki"; cin >> Ny; pair<double, double> coords[24]; for (j = 1; j <= 12; j++) { //пересечения с горизонт линиями сетки y = Ny*j; x = (x2*(y - y1) - x1*(y - y2)) / (y2 - y1); coords[j - 1].first = x; coords[j - 1].second = y; cout << x <<" "<<y <<endl;
} for (i = 1; i <= 12;i++) { //пересечения с вертик линиями сетки x = Ny*i; y = (y2*(x - x1) - y1*(x - x2)) / (x2 - x1); coords[11 + i].first = x; coords[11 + i].second = y; cout << x <<" "<<y <<endl; } sort(coords); //сортировка по возрастанию и вывод координат for (j = 0; j < 24; j++) cout << coords[j].first <<" "<< coords[j].second << endl; for(j=0;j<24;j=j+2) //вывод длин пересечений cout << sqrt((coords[j+1].first-coords[j].first)*(coords[j+1].first-coords[j].first)+(coords[j+1].second- coords[j].second)*(coords[j+1].second-coords[j].second))<< endl; //вывод длин пересечений
system("pause"); return 0;
}
|
|