|
Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения |
21.12.2007, 19:48
|
#1
|
|
случайная точка внутри кривосторонего треугольника
собсно вот :
надо равномерное распределение полученых точек
ps. кривая сторона может быть и не гиперболой .. просто кривая
по форме идентична той что на рисунке
|
|
|
21.12.2007, 19:51
|
#2
|
Дэвелопер
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений (для 110 пользователей)
|
Re: случайная точка внутри кривосторонего треугольника
Надо знать уравнение гиперболы. Если же оно неизвестно, как вариант, можно заполнить нужную область какими-то данными (одним цветом). Затем построить апроксимирующую кривую - можно просто прямую, чтобы получился треугольник. И проверять цвет в полученной точке. Если не попал, выбираешь новую точку.
Если уравнение задано, должно быть понятно, как делать.
|
(Offline)
|
|
21.12.2007, 20:33
|
#3
|
|
Re: случайная точка внутри кривосторонего треугольника
хм, ладно можно значит немного упростить случай
разбить параболу на прямые линии и проводить расчет с етой
областью
.................
в общем разобрался : (если кривая заданна f(x) )
x = rand(x0,x1)
y = rand(f(x-x0)+y0,y1)
осталось подобрать такую кривую
|
|
|
21.12.2007, 21:23
|
#4
|
Дэвелопер
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений (для 110 пользователей)
|
Re: случайная точка внутри кривосторонего треугольника
f(x) = -a/x не катит типа?)
|
(Offline)
|
|
21.12.2007, 21:55
|
#5
|
|
Re: случайная точка внутри кривосторонего треугольника
alcoSHoLiK
не катит типа
|
|
|
21.12.2007, 21:57
|
#6
|
Дэвелопер
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений (для 164 пользователей)
|
Re: случайная точка внутри кривосторонего треугольника
Навскидку, тупейший вариант- это генерировать точки до тех пор, пока одна из них не попадёт внутрь фигуры.
REPEAT
RndX=RND(FigWidth)
RndY=RND(FigHeight)
FigY=RndX^2 ;тут формула, описывающая криволинейную сторону твоей фигуры
UNTIL RndY>FigY
Более логичный- это генерировать сначала точку на абсциссе, а потом, скача от нее - строить соответствующую точку на ординате.
RndX=RND(FigWidth)
FigH#=RndX^2 ; тут- формула, описывающая твою кривую "гипотенузу"
RndY=RND(FigH)
P.S. Тут для простоты считается, что фигура лежит в начале координат- исправить для произвольного расположения не сложно. Методы ессно не заработают, если фигура будет повёрнута на произвольный угол, т.е. ёё координатная система не будет совпадать с глобальной... Хотя- заработают. Нужно будет просто заюзать Sin/Cos и "повернуть" глобальные координаты найденной точки на "локальный" угол поворота фигуры.
|
(Offline)
|
|
21.12.2007, 22:14
|
#7
|
|
Re: случайная точка внутри кривосторонего треугольника
вот примерно то что мне надо
Graphics 800,600,0,0
Global x0# = 200
Global y0# = 100
Global x1# = 400
Global y1# = 300
Function f(x#)
If x < (x1-x0)/1.5 Then
Return x - x/2
Else
Return x - ((x1-x0)-x)
End If
End Function
While Not (KeyHit(key_escape) Or AppTerminate())
SetColor 255,255,255
DrawLine x1,y0,x1,y1
DrawLine x0,y1,x1,y1
SetColor 128,128,128
For x# = x0 To x1
DrawRect x,-f(x-x0)+y1,1,1
Next
x# = Rand(x0,x1)
y# = Rand(-f(x-x0)+y1,y1)
SetColor 255,0,0
DrawRect x,y,1,1
Flip
Wend
всем спасибо, все свободны
|
|
|
22.12.2007, 00:30
|
#8
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Re: случайная точка внутри кривосторонего треугольника
ИМХО сначала следует вычислить случайную точку в пределах прямоугольника (0,высота фигуры, 0, -ширина фигуры), а затем проверить, принадлежит ли она этому эмм, треугольнику, и только если принадлежит, то рисовать её - хоть это и не слишком-то рационально, но зато поможет избавиться от скопления точек в левой части фигуры.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
22.12.2007, 00:49
|
#9
|
|
Re: случайная точка внутри кривосторонего треугольника
ABTOMAT
это тупо, перечитай тему
|
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:27.
|