Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как вычислить номера клеток пересечения прямых 
:(
    Опции темы
AnnBlack
Дата 16.11.2017, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 3.11.2017

Репутация: нет
Всего: нет



Есть  прямая,которая задается координатами начала 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;
 

}


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0965 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.