• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Трабл С Графикой

  • Автор темы QWIPQ
  • Дата начала
Q

QWIPQ

Здравствуйте
Есть задачка и куча проблем к ней...

Суть задачи: есть карта(или часть карты) в цилиндрической проекции, необходимо нанести пеленг на нее... суть в том, что пеленг на данной карте есть СПЕЦИФИЧЕСКАЯ кривая которая задается функцией...

Вопрос: как возможно реализовать построение графика функции из определенной точки на поле TImage??
или предложите вариант как это можно реализовать...

Пример(Прикрепленная картинка): так должно быть в идеале пример взят из программы DXAtlas

Заранее спасибо.
 

Вложения

  • Без_имени_1.jpg
    Без_имени_1.jpg
    82,4 КБ · Просмотры: 685
L

lazybiz

Я понял так: надо провести кривую от одной точки на изображении до другой в виде дуги.

P.S.: Язык программирования? Навыки в программировании есть?
 
Q

QWIPQ

Язык: С++
Среда: RAD Studio 2010

Навыки кое-какие есть... теперь задача стоит за построением этой кривой... только вопрос как эт сделать...

P.S. ты первый с 3х форумов кто хоть чет написал :)
 
Q

QWIPQ

Я не просто так спросил
хоть и новичок в проганье и дофига чему учиться, но хоть чет знаю)

Что сам предпринял для решения задачи?
рассматривал различные методы построения этой кривой от построения элипса и использования Arc, сделал привязку пикселей к координатам, динамически отображение координат при перемещении курсора по карте чтоб хоть как-то отследить какую-нить зависимость... смотрел метод TChart но в нем минус хоть и можно сделать в нем отображение графика функции но нельзя оставить ток график и нельзя привязать к рисунку... если можно то не разобрался до конца видимо...

Какими средствами необходимо пользоваться?
любые :) главное чтоб было написано на С++
 
L

lazybiz

У меня непредвиденные обстоятельства, сегодня-завтра расскажу о результатах построения дуги.
 
L

lazybiz

Могу предложить только такой вариант.

C++:
void arc( HDC hdc, int x0, int x1, int y )
{
double	r, h;
double	cx, cy;
int		i, a, n;

a = x1 - x0;
n = a / 4;
if ( !(n & 1) ) n++;
h = sqrt( 3. ) / 2 * a;
cx = (double)a / 2 + x0;
cy = h + y;

for ( i = 0, r = PI*4/3; r <= PI*5/3 + 0.0001; r += PI/3 / n, i++ ) {
if ( i & 1 ) {
LineTo( hdc,
cos( r ) * a + cx,
sin( r ) * a + cy );
} else {
MoveToEx( hdc,
cos( r ) * a + cx,
sin( r ) * a + cy, NULL );
}
}
}
 

Вложения

  • ARC.png
    ARC.png
    1,2 КБ · Просмотры: 549
Q

QWIPQ

У этой дуги координата Y начальной и конечной точки совпадают?

нет это произвольная точка пространства, известно только что точка конца будет находиться не выше точки начала...

P.S. как только код опробую и разберусь в нем напишу. спасибо
 
Q

QWIPQ

C++:
	for ( i = 0, r = PI*4/3; r <= PI*5/3 + 0.0001; r += PI/3 / n, i++ ) {
if ( i & 1 ) {
LineTo( hdc,
cos( r ) * a + cx,
sin( r ) * a + cy );
} else {
MoveToEx( hdc,
cos( r ) * a + cx,
sin( r ) * a + cy, NULL );
}
}
подскажи плз на чем рисует... а то не встречал такого еще... вроде все глянул подставил что нужно но програ висит, и ток вижу ЦП грузит и Оперативку жрет...
еще вопросик по HDC... я с THandle еще не встречался... раскажи плз поподробней что эт и как работает... ща гуглил нашел общее представление о HDC но ничего конкретного...
 
L

lazybiz

P.S. как только код опробую и разберусь в нем напишу. спасибо
Мой код работает только если точки находятся на одной горизонтальной прямой.

известно только что точка конца будет находиться не выше точки начала...
Не совсем понял, т.е. точка конца может быть ниже точки начала?
 
Q

QWIPQ

Не совсем понял, т.е. точка конца может быть ниже точки начала?
она фактически ниже... но самый трабл эт когда точка конца на одном X но разных Y... в таком случае должна быть прямая...
 
L

lazybiz

Нет смысла разбираться в моем коде, если точки не находятся на одном уровне.
 
Q

QWIPQ

Нет смысла разбираться в моем коде, если точки не находятся на одном уровне.
1. смысл в попутном самообучении параллельном
2. если все-таки удастся построить то возможно не все так плохо... можно попробовать будет переделать если понять как неизвестные части работают...
 
L

lazybiz

она фактически ниже... но самый трабл эт когда точка конца на одном X но разных Y... в таком случае должна быть прямая...
Теперь я думаю что понял окончательно что тебе нужно, но не уверен что смогу сделать.

P.S.: я не знаю что такое THandle, TChart и т.д. и т.п... Ты пишешь в MFC, в C++ Builder или где вообще?
 
Q

QWIPQ

C++:
			MoveToEx( hdc,
cos( r ) * a + cx,
sin( r ) * a + cy, NULL );
C++:
			LineTo( hdc,
cos( r ) * a + cx,
sin( r ) * a + cy );
для меня пока что эт неизвестно:) точнее я знаю функции LineTo, MoveTo но в таком исполнении через 3 оператора еще не видел

Добавлено:
Ты пишешь в MFC, в C++ Builder или где вообще?
Embarcadero RAD Studio 2010 == C++ Biulder 6
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!