Форум программистов, компьютерный форум CyberForum.ru

координаты точек на спирали - C++

Восстановить пароль Регистрация
 
Smogas12
0 / 0 / 0
Регистрация: 02.10.2011
Сообщений: 18
01.04.2012, 20:08     координаты точек на спирали #1
Не знал в какой раздел написать...
Подскажите пожалуйста, как по спирали равномерно вывести символы? Точнее больше интересует сам алгоритм нахождения координат точек для вывода символов.

Использую такой цикл:

for(t2=0;t<50;t++)
{
x = 20*t2*sin(t2);
y = 20*t2*cos(t2);
}

Но вся загвоздка в том, что чем дальше по спирали удаляюсь от центра, тем больше становится расстояние между координатами, как это исправить? Нужно, чтобы координаты точек находились на одном расстоянии вдоль кривой....
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2012, 20:08     координаты точек на спирали
Посмотрите здесь:

Координаты точек C++
Даны координаты точек х1, у1, ... х15, у15. Если точка попадает на плоскость, ограниченную кругом x2 + y2 = R2 - вывести ее координаты C++
Заданы координаты точки подвеса математического маятника A(xa, ya, za) и координаты одной из точек его наивысшего подъема B(xb, yb, zb). Найти координ C++
C++ Определить, сколько точек пересечения имеют прямая и окружность и найти координаты этих точек
C++ Найти координаты числа в бесконечной спирали из чисел
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TwiX
59 / 59 / 1
Регистрация: 27.10.2011
Сообщений: 189
01.04.2012, 20:24     координаты точек на спирали #2
Чтобы расстояние между точками на спирали было постоянным, тебе нужен натуральный параметр. Это аналитически, либо численно. Если не знаешь, что такое натуральный параметр, то вечером напишу пример численного вычисления.
Smogas12
0 / 0 / 0
Регистрация: 02.10.2011
Сообщений: 18
01.04.2012, 20:29  [ТС]     координаты точек на спирали #3
да, буду признателен
TwiX
59 / 59 / 1
Регистрация: 27.10.2011
Сообщений: 189
01.04.2012, 23:15     координаты точек на спирали #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    int needP, gotP;
    double phi, ep, x, y, x2, y2, xC, yC, D, l;
 
    x2 = y2 = xC = yC = 200; //центр спирали
    phi=0; ep=0.1; D=30; l=0; //ep - точность (чем меньше, тем меньше погрешность), D - расстояние между точками
    needP=50; gotP=0; //needP - сколько нужно точек
    Canvas->MoveTo(xC, yC);
 
 
    while (gotP<needP)
    {
        x = xC+10*phi*sin(phi);
        y = yC+10*phi*cos(phi);
        l+=Sqrt((x2-x)*(x2-x)+(y2-y)*(y2-y));
        x2 = x; y2 = y;
 
        if (l>D) { 
            //когда мы сюда заходим, в x, y лежат координаты точки с индексом gotP
            l=0;
            Canvas->Ellipse(x-2, y-2, x+3, y+3);
            Canvas->LineTo(x, y);
            gotP++;
        }
        phi+=ep;
    }
Всё, что связано с Canvas можешь удалить - тестировал =)
Миниатюры
координаты точек на спирали  
TwiX
59 / 59 / 1
Регистрация: 27.10.2011
Сообщений: 189
02.04.2012, 21:36     координаты точек на спирали #5
А еще, не подскажете, как высчитать в полученных точках на спирали угол наклона букв?
В каждой точке спирали угол наклона будет равен значению параметра на кривой. В моём примере это phi (надо помнить, что это значение в радианах).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
void MyTextOut(TCanvas *Canvas, int x, int y, double phi, String text)
{
  LOGFONT lf;                         // определяем структуру шрифта
  Canvas->Brush->Style = bsClear;     // устан прозрачный стиль кисти
  ZeroMemory(&lf, sizeof(LOGFONT));   //очищаем память
  lf.lfHeight = 20;                  // высота шрифта (размер подбирается системой)
  lf.lfEscapement = phi/3.1415*180*10 ; // угол поворота например: 45*00" = 450
  lf.lfOrientation = 900;              // ориентация  в десятых долях градуса
                                       // под WinXP почему-то не работает :(
  lf.lfCharSet = DEFAULT_CHARSET;       // набор символов
  strcpy(lf.lfFaceName, "Times New Roman");       // шрифт
  Canvas->Font->Handle = CreateFontIndirect(&lf); // создаем из структуры хэндл
                         // и устанавливаем его текущим
  Canvas->TextOut(x, y, text);           // выводим текст на холст (канву)
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int needP, gotP;
    double phi, ep, x, y, x2, y2, xC, yC, D, l;
 
    x2 = y2 = xC = yC = 200; //центр спирали
    phi=0; ep=0.1; D=30; l=0; //ep - точность (чем меньше, тем меньше погрешность), D - расстояние между точками
    needP=50; gotP=0; //needP - сколько нужно точек
    Canvas->MoveTo(xC, yC);
 
 
    while (gotP<needP)
    {
        x = xC+10*phi*sin(phi);
        y = yC+10*phi*cos(phi);
        l+=Sqrt((x2-x)*(x2-x)+(y2-y)*(y2-y));
        x2 = x; y2 = y;
 
        if (l>D) {
            //когда мы сюда заходим, в x, y лежат координаты точки с индексом gotP
            l=0;
            Canvas->Ellipse(x-2, y-2, x+3, y+3);
            //Canvas->LineTo(x, y);
            gotP++;
            MyTextOut(Canvas, x, y, phi, "A");
        }
        phi+=ep;
    }
}
Миниатюры
координаты точек на спирали  
Yandex
Объявления
02.04.2012, 21:36     координаты точек на спирали
Ответ Создать тему
Опции темы

Текущее время: 20:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru