Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Теория программирования > Общие вопросы создания ПО
Перезагрузить страницу Тип double, геометрическая точность
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
winamp winamp вне форума
Member
 
Сообщений: 262
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 19.08.2008
Thumbs up Тип double, геометрическая точность - 16.10.2008, 17:44

В программе имеется геометрические примитивы заданные координатами.
Координаты примитивов могут масштабироваться в широких(но разумных) пределах.

Есть функция, которая линии и точки определяет, пересекает ли линия точку так:

line.dist(point)<Epsilon


т.к. координаты масштабируются в широких пределах,
Epsilon=const
не годится


Как выбрать Epsilon?
У кого есть опыт подскажите плз.
Ответить с цитированием
  (#2 (permalink)) Старый
winamp winamp вне форума
Member
 
Сообщений: 262
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 19.08.2008
Thumbs up Тип double, геометрическая точность - 16.10.2008, 17:44

В программе имеется геометрические примитивы заданные координатами.
Координаты примитивов могут масштабироваться в широких(но разумных) пределах.

Есть функция, которая линии и точки определяет, пересекает ли линия точку так:

line.dist(point)<Epsilon


т.к. координаты масштабируются в широких пределах,
Epsilon=const
не годится


Как выбрать Epsilon?
У кого есть опыт подскажите плз.
Ответить с цитированием
  (#3 (permalink)) Старый
night-stels night-stels вне форума
Member
 
Сообщений: 440
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.08.2008
По умолчанию 17.10.2008, 15:05

Может так?

e = 0.0001 / (1 - Zoom)

где Zoom - масштаб от 0 до 1.
При Zoom == 1 масштаб самый удаленный (e = 0.0001). Чем ближе к 0 тем масштаб более приближенный (например e = 0.0002 при двойном увеличении).
Ответить с цитированием
  (#4 (permalink)) Старый
night-stels night-stels вне форума
Member
 
Сообщений: 440
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.08.2008
По умолчанию 17.10.2008, 15:05

Может так?

e = 0.0001 / (1 - Zoom)

где Zoom - масштаб от 0 до 1.
При Zoom == 1 масштаб самый удаленный (e = 0.0001). Чем ближе к 0 тем масштаб более приближенный (например e = 0.0002 при двойном увеличении).
Ответить с цитированием
  (#5 (permalink)) Старый
winamp winamp вне форума
Member
 
Сообщений: 262
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 19.08.2008
Talking 17.10.2008, 17:35

Цитата:
Может так?
.....
нет, так не годится .
Вопрос совсем не в zoom'e , а в операциях с плав. точкой:

Для плоскости имеется уравнение y=k*x+b;

Пусть имеется отрезок (x1,y1)-(x2,y2)

Определяем k и b из уравнения ,

Подставляем в уравнение координаты точек и...



-это во первых .


Во вторых, если выбрана какая либо погрешность, то она должна изменяться
в зависимости от порядка рассматриваемых чисел :

пусть подобрали Eps , которая будет оптимальной для отрезка

(1,1)-(2,2)

Годится ли она для случая

(1000,1000)-(2000,2000)
?

если числа в типе double имеют формат:

1.00000....E00

1.00000....E03


-Очевидно она должна быть в 1000 раз больше.

Ну дак, вопрос как выбирать погрешность
исходя из порядков имеющихся чисел(при том, что порядки могут сильно отличаться) ?

P.s.
к zoom'у тоже можно привязывать, но хочется написать что-то универсальное, неломающееся
в любых случаях, даже при неумелом использовании
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
winamp winamp вне форума
Member
 
Сообщений: 262
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 19.08.2008
Talking 17.10.2008, 17:35

Цитата:
Может так?
.....
нет, так не годится .
Вопрос совсем не в zoom'e , а в операциях с плав. точкой:

Для плоскости имеется уравнение y=k*x+b;

Пусть имеется отрезок (x1,y1)-(x2,y2)

Определяем k и b из уравнения ,

Подставляем в уравнение координаты точек и...



-это во первых .


Во вторых, если выбрана какая либо погрешность, то она должна изменяться
в зависимости от порядка рассматриваемых чисел :

пусть подобрали Eps , которая будет оптимальной для отрезка

(1,1)-(2,2)

Годится ли она для случая

(1000,1000)-(2000,2000)
?

если числа в типе double имеют формат:

1.00000....E00

1.00000....E03


-Очевидно она должна быть в 1000 раз больше.

Ну дак, вопрос как выбирать погрешность
исходя из порядков имеющихся чисел(при том, что порядки могут сильно отличаться) ?

P.s.
к zoom'у тоже можно привязывать, но хочется написать что-то универсальное, неломающееся
в любых случаях, даже при неумелом использовании
Ответить с цитированием
  (#7 (permalink)) Старый
night-stels night-stels вне форума
Member
 
Сообщений: 440
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.08.2008
По умолчанию 17.10.2008, 19:52

А какие варианты уже рассматривались?
Ответить с цитированием
Ads
  (#8 (permalink)) Старый
night-stels night-stels вне форума
Member
 
Сообщений: 440
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.08.2008
По умолчанию 17.10.2008, 19:52

А какие варианты уже рассматривались?
Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Геометрическая задача на Паскале tapah4ik Вопросы начинающих программистов 3 12.04.2011 07:55
Геометрическая программа С++ mego4el Visual C++ 2 20.09.2010 18:13
геометрическая задача tali Prolog 14 09.11.2009 16:35
Как преобразовать double в CString irogrish Visual C++ 8 26.04.2007 00:20
При передачи значений переменных, типа float, в функцию теряеться точность Iv@nich C++ Builder 1 24.02.2007 00:19
Геометрическая задача в прологе. Erilar Prolog 8 03.12.2006 18:23
Как преобразовать AnsiString в Double Хочу быть программистом C++ Builder 5 12.11.2006 21:48
Как конвертнуть из double в другой тип sq-Weezee C++ Builder 4 23.03.2006 02:14
Точность числовых данных при выводе в файл RENegade С/С++ 4 05.12.2005 03:41
С каким максимальным положительным числом long double сохраняется наибольшая точность merced C++ Builder 8 22.11.2005 20:12
Нужна точность вычислений более 20 знаков Manik Delphi 33 13.02.2005 19:02
Запись double в LIST BOX Deito Visual C++ 4 21.03.2004 16:36



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов