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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2014, 02:53   #1
exyl
Пользователь
 
Регистрация: 15.11.2014
Сообщений: 75
По умолчанию Расчет распределения точек на отрезке

Всем привет.
Столкнулся с задачей.
Программа находит координаты двух точек на плоскости (алгоритм в данном случае не важен, пусть хоть рандом). Далее в фиксированный массив из TPoint (вне зависимости от длины отрезка в нем будет 32 значения) нужно занести координаты точек, лежащих на этом отрезке согласно некоторой формуле, которая на концах отрезка сосредотачивает больше точек, чем в середине.
Графически это можно представить так (см. картинку).
Есть глобальные переменные:
Код:
var
  _A: array [0..31] of TPoint;
  _X1Y1, _X2Y2: Tpoint;
Они передаются процедуре, которая заполняет массив значениями:
Код:
procedure CountCurve(X1Y1, X2Y2: TPoint; A: array of TPoint)
var
  i: byte;
  DlinaOtrezka: integer;
begin
  DlinaOtrezka:=sqrt(sqr(X2Y2.X-X1Y1.X)+sqr(X2Y2.Y-X1Y1.Y));
  PoschitatRaspredelenieTochek(DlinaOtrezka, A);
  for i:=Low(A) to High(A) do
    begin
      A[i].X:=A[i].X+?;  //
      A[i].Y:=A[i].X+?;  //
    end;
end;
где процедура расчета точек описана так:
Код:
procedure PoschitatRaspredelenieTochek(LengthOfX1Y1_X2Y2: integer; A: array of TPoint);
, т.е. в нее передается длина отрезка и массив TPoint, а возвращается он же, но с нужным распределением точек, причем в своих координатах.
Так вот два вопроса:
1. Как посчитать нужные точки на нужном отрезке?
2. Таких вычислений много, поэтому нужен шустрый алгоритм. Как оптимальнее это сделать?

P.S. распределение точек в PoschitatRaspredelenieTochek можно представить в виде обратной параболы, минимум которой находится на середине отрезка.
Изображения
Тип файла: jpg Curve.jpg (22.2 Кб, 75 просмотров)

Последний раз редактировалось exyl; 10.12.2014 в 02:56.
exyl вне форума Ответить с цитированием
Старый 10.12.2014, 03:08   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Если массив А должен вернуться как-то измененным , но надо добавить волшебное слово var
Код:
procedure PoschitatRaspredelenieTochek(LengthOfX1Y1_X2Y2: integer; var A: array of TPoint);
А почему так:
Код:
 A[i].X:=A[i].X+?;
а не просто
Код:
 A[i].X:=?;
?
И как все-таки долны быть распределены эти 32 точки по отрезку?
- случайно по какому-то закону распределения с минимумом плотности в середине, или
- не случайно, а по заранее определенному порядку.
type_Oleg вне форума Ответить с цитированием
Старый 10.12.2014, 03:23   #3
exyl
Пользователь
 
Регистрация: 15.11.2014
Сообщений: 75
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Если массив А должен вернуться как-то измененным , но надо добавить волшебное слово var
Код я от балды на форуме написал, в проекте вообще по-другому и PoschitatRaspredelenieTochek не вызывается внутри процедуры CountCurve.

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
А почему так:
Код:
A[i].X:=A[i].X+?;
Ну потому что в этом массиве уже будут значения, которые нужно использовать. На самом деле, естественно, возможно они в знаменатель, например, встанут.

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
И как все-таки долны быть распределены эти 32 точки по отрезку?
Не случайно, а по заранее определенному алгоритму (перевернутая парабола).
exyl вне форума Ответить с цитированием
Старый 10.12.2014, 08:01   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Есть некая функция f(x) определенная на отрезке [x1,x2]. Равномерно разбиваем на k точек область значений функции на этом отрезке и получаем по этим значениям значения аргумента, которые и переносим со смещением и, если надо, с поворотом на наш отрезок. Как то в этом направлении

ADD

Забыл, там еще возможно растяжение/сжатие потребуется и в таком порядке:

1. смещаем исходный отрезок к нулю
2. преобразование растяжения
3. преобразование поворота
4. преобразование смещения
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 10.12.2014 в 10:02.
Аватар вне форума Ответить с цитированием
Старый 10.12.2014, 09:17   #5
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Как-то не укладывается - 32 точки по отрезку с точкой в центре...(((
Iron Monk вне форума Ответить с цитированием
Старый 10.12.2014, 17:15   #6
exyl
Пользователь
 
Регистрация: 15.11.2014
Сообщений: 75
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Есть некая функция f(x) определенная на отрезке [x1,x2]. Равномерно разбиваем на k точек область значений функции на этом отрезке и получаем по этим значениям значения аргумента, которые и переносим со смещением и, если надо, с поворотом на наш отрезок.
Зачем же равномерно, если функция распределяет их в виде перевернутой параболы?
Смещение есть, но зачем поворот? Естественно, что эту задачу можно решить и через векторы, и по теореме косинусов, но что оптимальнее в плане быстродействия?

Цитата:
Как-то не укладывается - 32 точки по отрезку с точкой в центре...(((
А где ты там 32 точки увидел? )) Это ж схематично изображено.
exyl вне форума Ответить с цитированием
Старый 10.12.2014, 17:22   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Зачем же равномерно, если функция распределяет их в виде перевернутой параболы?
Так и предлагаю таким путем получить эту разбивку по оси аргумента
Цитата:
Смещение есть, но зачем поворот?
На картинке выше приведен отрезок под углом, поэтому и поворот
Изображения
Тип файла: jpg Безымянный.JPG (7.6 Кб, 57 просмотров)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 10.12.2014 в 17:34.
Аватар вне форума Ответить с цитированием
Старый 10.12.2014, 18:24   #8
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

на самом деле очень интересно будет увидеть решение
можно попробовать через квадратное уровненные
https://ru.wikipedia.org/wiki/%D0%9F...BE%D0%BB%D0%B0
простите забыл про поворот
Терпение!Дежурный экстрасенс скоро свяжется с вами!

Последний раз редактировалось Dvoishnik; 10.12.2014 в 18:51.
Dvoishnik вне форума Ответить с цитированием
Старый 10.12.2014, 18:45   #9
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Цитата:
Сообщение от exyl Посмотреть сообщение
А где ты там 32 точки увидел? )) Это ж схематично изображено.
Цитата:
P.S. распределение точек в PoschitatRaspredelenieTochek можно представить в виде обратной параболы, минимум которой находится на середине отрезка.
Четное количество с точкой посредине?
Iron Monk вне форума Ответить с цитированием
Старый 10.12.2014, 20:13   #10
exyl
Пользователь
 
Регистрация: 15.11.2014
Сообщений: 75
По умолчанию

Цитата:
Сообщение от Iron Monk Посмотреть сообщение
Четное количество с точкой посредине?
Еще раз говорю, рисунок схематичный. А если есть минимум в формуле, то это совсем не значит, что в этом минимуме будет вообще находится точка в массиве. И даже больше, ее там точно не будет, т.к. ты совершенно верно подметил, что точек четное количество.
exyl вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на расчет попадания количества точек в заданную область. Ильдар_ Помощь студентам 5 23.12.2013 02:28
Даны координаты точек n на плоскости. Найти номера двух точек, расстояние между которыми наибольшее. getredtm Помощь студентам 3 01.07.2013 01:47
Задаnm n точек. Найти m=3,4... точек и построить на них m-угольник: количество точек , лежащих внутри и вне его мин. различается L.Rain Помощь студентам 0 11.12.2011 22:19
Даны координаты n точек на плоскости. Найти номера двух точек, расстояние между которыми наибольшее. Viwwna Паскаль, Turbo Pascal, PascalABC.NET 2 19.11.2011 06:33
определить радиус и центр окружности, на кот. лежит наиб.число точек заданного на плоскости мн-ва точек) kcю Помощь студентам 0 17.11.2009 19:50