Поиск:

Ответ в темуСоздание новой темы Создание опроса
> прямые, проходящие через черные точки 
:(
    Опции темы
toshkaexe
Дата 19.2.2007, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 57
Регистрация: 16.2.2007

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



задача, есть точка на картинке с координатами (x,y) нужно нарисовать, например, при прямые(c определеннм наклоном), проходящие церез эту точку.
Код

for (i=0;i<360;i++)
        {

        x=x0+dlina*shirina*cos(fi*TORAD);
        y=y0+dlina*shirina*sin(fi*TORAD);
        Form1->Image2->Canvas->MoveTo(x0-x,y0-y);
        Form1->Image2->Canvas->LineTo(x0+x,y0+y);
        fi=fi+(360/10);


        }

это я сделал, теперь нужно е из N-ого количества прямых, проведеных через точку (x,y) оставить ту прямую, которая проходит через максимальное количество черных точек на картинке. подскажите, как это можно сделать.
PM MAIL   Вверх
AntonChik
Дата 19.2.2007, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



делаешь массив int n[360]; обнуляешь все его элементы на всяк.случ.
в цикле перебираешь все точки каждой линии т.е. 
в своем коде вместо 
Код

     Form1->Image2->Canvas->MoveTo(x0-x,y0-y);
     Form1->Image2->Canvas->LineTo(x0+x,y0+y);

пишешь типо
Код

for (j=x0-x;j<x0+x;j++)
{
xx=j;
yy=(y0-y)+(xx-(x0-x))*(x/y);
if(Form1->Image2->Canvas->Pixels[xx][yy]==clBlack)n[i]++;
}
в конце ишешь три максимальных значения из n[360] smile
короче с математикой я мог накосячить, но зацепка думаю есть...

--------------------
"Человек притаился за деревом. За широким огромным деревом. Он выглядывал тихонько и прятался. Но его никто не преследовал." (с) Хорги 
PM MAIL   Вверх
toshkaexe
Дата 19.2.2007, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 57
Регистрация: 16.2.2007

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



Цитата(AntonChik @ 19.2.2007,  13:26)
делаешь массив int n[360]; обнуляешь все его элементы на всяк.случ.
в цикле перебираешь все точки каждой линии т.е. 
в своем коде вместо 
Код

     Form1->Image2->Canvas->MoveTo(x0-x,y0-y);
     Form1->Image2->Canvas->LineTo(x0+x,y0+y);

пишешь типо
Код

for (j=x0-x;j<x0+x;j++)
{
xx=j;
yy=(y0-y)+(xx-(x0-x))*(x/y);
if(Form1->Image2->Canvas->Pixels[xx][yy]==clBlack)n[i]++;
}
в конце ишешь три максимальных значения из n[360] smile
короче с математикой я мог накосячить, но зацепка думаю есть...

вопрос. почему три точки ищем?
PM MAIL   Вверх
AntonChik
Дата 19.2.2007, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



а, ну да. эт я туплю - мне показалось что надо 3 прямых найти... ну да, ищи одно макс. значение из n[360] smile
--------------------
"Человек притаился за деревом. За широким огромным деревом. Он выглядывал тихонько и прятался. Но его никто не преследовал." (с) Хорги 
PM MAIL   Вверх
toshkaexe
Дата 19.2.2007, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 57
Регистрация: 16.2.2007

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



поясните формулу


yy=(y0-y)+(xx-(x0-x))*(x/y);

уравнение касательной? может быть вы имели виду     yy=(y-y0)+(xx-(x-x0))*(y/x);

только такое преобразование не рисует сплошные линии, а лишь точки... smile 

Это сообщение отредактировал(а) toshkaexe - 19.2.2007, 14:26
PM MAIL   Вверх
AntonChik
Дата 20.2.2007, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



не касательной, а грубо говоря каждого диаметра...
почему лишь точки? ну а что мешает уменьшить интервал??? сделать не j++ ,а там j+=0.001 , ну естественно j есть float 
--------------------
"Человек притаился за деревом. За широким огромным деревом. Он выглядывал тихонько и прятался. Но его никто не преследовал." (с) Хорги 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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