Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2013, 11:02   #1
morg4n
 
Регистрация: 05.12.2011
Сообщений: 8
По умолчанию Найти все точки принадлежащие эллипсу

Задание:
Цитата:
По заданным размерам экрана дисплея в мм и заданной геометрической погрешности вычисляем минимальный геометрической размер пиксела и определяем пиксельное разрешение экрана дисплея.

Осуществляя последовательное прохождение растра от левого верхнего пиксела растра до конца первой строки, затем переходим на вторую строку и т.д. доходим до конца растра (рисунок2).
В каждом пикселе подставляем его геометрическое значение в алгебраическое уравнение и решая его определяем, принадлежит ли данный пиксел нашему эллипсу, если да, то в массив растра записываем 1, если нет, то пишем 0. Запись массива заканчивается в последней точке.
Условия: размер экрана 160 мм ширина, 180мм высота, погрешность 0.13мм (как я понимаю размер пикселя), центр эллипса 80 мм по х , 50мм по y, a 22mm, b 45mm.

Код:
#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;
double sqr(double some) {return some*some;}
int main()
{
    double x,y;
    int width=160,height=180;
    int x0=80,y0=50,
        a=22,b=45;
    double mis=0.13;

    freopen("rastr_model.txt","w",stdout);
    for(y=height;y>=0;y=y-mis){
        for(x=0;x<=width;x=x+mis){
            if(sqr(x-x0)/sqr(a) + sqr(y-y0)/sqr(b) <1.0+mis
                    && sqr(x-x0)/sqr(a) + sqr(y-y0)/sqr(b) >1.0-mis)
           cout<<"1";
            else
           cout<<"0";
        }
        cout<<"\n";
    }
    return 0;
}
Правильно ли я все понял? Может есть лучшие решения?
И как найти пиксельное разрешение экрана дисплея?

просто получается что-то дикое.. output file over много мб...

Последний раз редактировалось morg4n; 19.04.2013 в 11:46.
morg4n вне форума Ответить с цитированием
Старый 19.04.2013, 11:42   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

У Вас в коде x и y не меняются.
Abstraction вне форума Ответить с цитированием
Старый 19.04.2013, 11:44   #3
morg4n
 
Регистрация: 05.12.2011
Сообщений: 8
По умолчанию

Если Вас не затруднит, подскажите правильную запись цикла.
Код:
for(y=height;y>=0;y=y-mis){
        for(x=0;x<=width;x=x+mis){
А так в остальном код нормальный?
morg4n вне форума Ответить с цитированием
Старый 19.04.2013, 11:54   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Если Вас не затруднит, подскажите правильную запись цикла.
Зависит от того, что Вы хотите сделать. Если нужно обойти все пиксели экрана, то скорее так:
Код:
for(int y = 0; y<height; ++y){
  for(int x = 0; x<width; ++x){
    //Проверка, принадлежит ли эллипсу пиксель (x,y)
  }
  //Переход на новую строку
}
Цитата:
А так в остальном код нормальный?
Как решение "в лоб" - вроде да. Но сейчас для всех пикселей проводится одинаковая проверка, а ведь большую часть пикселей можно отбросить условиями, которые вычисляются быстрее (к примеру, можно вывести размеры некоторого вписанного в эллипс прямоугольника - принадлежность к нему проверяется в четыре сравнения, без квадратов и делений; можно, напротив, для данного y быстро выделять не больше шести пикселей, которые уже проверять детально).
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Убрать все точки восстановления системы? drmorgan Win Api 10 10.08.2012 08:23
Найти минимальный радиус шара, который будет охватывать все заданные точки(центр окружности лежит на одной из заданных точек) ExploiT243 Помощь студентам 1 27.05.2012 10:31
Принадлежность точки эллипсу Горе_программист Помощь студентам 1 08.12.2011 01:09
Си найти минимальный путь от точки до точки dikr Помощь студентам 4 09.05.2010 11:58