forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Геометрия в Blitz3D (http://forum.boolean.name/showthread.php?t=5274)

Maxxx.!!!. 12.12.2007 16:58

Геометрия в Blitz3D
 
Вложений: 2
Я в геометрии вовсем дурак, а учебника под рукой нет (да и не было никогда :)). Так вот: есть квадрат размером, например, 30x30. В него вписан круг. Нужно, чтобы бейсик выдавал случайным образом координаты, которые находятся внутри этого круга (т.е. X и Y)

jimon 12.12.2007 17:08

Re: Геометрия в Blitz3D
 
r = 30
x = rand(0,r)
y = (rand(0,1)*2-1)* sqr((r*r)/4 - x*x)

ABTOMAT 12.12.2007 17:15

Re: Геометрия в Blitz3D
 
jimon, ты не мог бы немного ояснить сиё действо (мне самому интересно стало) :)

jimon 12.12.2007 17:22

Re: Геометрия в Blitz3D
 
уравнение круга X*X + Y*Y = R*R
получаем X по диаметру - тоесть от -R до R,или от 0 до 30 в нашем случае

выражаем Y из уравнения круга
|Y| = sqr ( R*R - X*X)
снимаем модуль с помощью случайности :)

Y = (rand(0,1)*2-1) * sqr( R*R - X*X )
( rand(0,1)*2-1 всегда возращает 1 или -1 )

* да кстати корень забыл, ужо исправил

Maxxx.!!!. 12.12.2007 17:36

Re: Геометрия в Blitz3D
 
Цитата:

Сообщение от jimon
r = 30
x = rand(0,r)
y = (rand(0,1)*2-1)* sqr((r*r)/4 - x*x)

r=20
x=Rand(0,r)
y=(Rand(0,1)*2-1)*Sqr((r*r)/4-x*x)

Не работает. Попробуй в цикле посмотреть, что за цифры он выдает. SeeRnd я делал.

alcoSHoLiK 12.12.2007 17:57

Re: Геометрия в Blitz3D
 
Можно просто параметризировать круг.
Код:

t = fixed
x = R * cos(t)
y = R * sin(t)

//////////////////////////////////////////////
Graphics 400, 400, 0, 2

Const R = 30
Const N = 1000


For i = 0 To N
        t = Rand(0, 360)
        Plot 200 + (Rand(0, R) * Cos(t)), 200 + (Rand(0, R) * Sin(t))
Next

WaitKey()

End


jimon 12.12.2007 18:01

Re: Геометрия в Blitz3D
 
вот исправленый вариант

Код:

d = 30
x = Rand(0,d)
y = Sqr((d*d)/4 - (x-d/2)*(x-d/2))*(Rand(0,1)*2-1)+d/2

теперь провереный :-)

ps. вариант Шолика лутче подходит имхо


Часовой пояс GMT +4, время: 17:56.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot