Среда, 16 Октября 2024, 04:53

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Подскажите, учить С++ дальше или взять конструктор
karuyДата: Среда, 02 Декабря 2009, 20:45 | Сообщение # 21
заслуженный участник
Сейчас нет на сайте
как насчет програмы, правильно?
WXZRWДата: Среда, 02 Декабря 2009, 20:50 | Сообщение # 22
Thousand faces conspiration
Сейчас нет на сайте
Quote (karuy)
class TSphere{
int radius;}
//
class TPoint{
int x;
int y;
int z;}
//
void main(){
TSphere Sphere=TSphere();
TPoint point[200];
randomize;
Sphere.radius=random(200);
for(int i=0;i<=200;i++){
randomize;
point[i]=TPoint();
point[i].x=random(200);
point[i].y=random(200);
point[i].z=random(200);}
for(int i=0;i<=200;i++){
if(sqrt(point[i].x*point[i].x+point[i].y*point[i].y+point[i].z*point[i].z)==Sphere.radius)
cout<<"Точка "+point[i].x+","point[i].y+","+point[i].z+"лежыт на поверхности сферы";}}
При условии что центр сферы в т. 0,0,0.

Ты получишь 200 векторов (точек), но не все они будут принадлежать к поверхности сферы. Можно доработать.

2 операций над векторами хватит для этого.

Можно также одним циклом сделать, и без sqrt

karuyДата: Среда, 02 Декабря 2009, 22:01 | Сообщение # 23
заслуженный участник
Сейчас нет на сайте
WXZRW:...Ты получишь 200 векторов (точек), но не все они будут принадлежать к поверхности сферы... Ето типа так задумано, рандомно ставятса точки, а потом чешет цыклом и проверяет на принадлежность их к сфере, конечно гдето 90%
не попадут на сферу. Ето должна вычислить прога.
...2 операций над векторами хватит для этого.... ето немного не понял, обясни.
...Можно также одним циклом сделать, и без sqrt... Про один цыкл согласен, а вот без sqrt никак, ето ж формула для вычисления длины вектора.
nilremДата: Среда, 02 Декабря 2009, 22:09 | Сообщение # 24
Просветленный разум
Сейчас нет на сайте
На самом деле все просто.
Сферические координаты это радиус и два угла(радиус, вертикальный угол, горизонтальный угол) Радиус постоянный, углы генерируем рандомом в пределах от 0 до 2Пи. Хотя такой диапазон необязательный.
А принадлежность доказываем теоремой Пифагора.

Действуйте.


Windmill 2

WindMill 2D Game Engine
WXZRWДата: Среда, 02 Декабря 2009, 22:34 | Сообщение # 25
Thousand faces conspiration
Сейчас нет на сайте
Quote (nilrem)
На самом деле все просто.
Сферические координаты это радиус и два угла(радиус, вертикальный угол, горизонтальный угол) Радиус постоянный, углы генерируем рандомом в пределах от 0 до 2Пи. Хотя такой диапазон необязательный.
А принадлежность доказываем теоремой Пифагора.

Действуйте.

Мог бы и позже сказать cool

Quote (karuy)
...2 операций над векторами хватит для этого.... ето немного не понял, обясни.
...Можно также одним циклом сделать, и без sqrt... Про один цыкл согласен, а вот без sqrt никак, ето ж формула для вычисления длины вектора.

Зачем вычислять длину вектора, если можно генерировать вектор нужной длины изначально? Сам способ генерации докажет правильность результата.
Этим можно обеспечить генерацию правильного вектора при каждой итерации.

Либо можно работать в сферических координатах изначально, как nilrem уже сказал.

nilremДата: Среда, 02 Декабря 2009, 22:39 | Сообщение # 26
Просветленный разум
Сейчас нет на сайте
Quote (WXZRW)
Мог бы и позже сказать

Так пусть хотя бы с подсказкой напишут.


Windmill 2

WindMill 2D Game Engine
karuyДата: Пятница, 04 Декабря 2009, 20:26 | Сообщение # 27
заслуженный участник
Сейчас нет на сайте
блин, сильно извиняюсь, я невнимательно прочел задачку и накодил прогу для проверки принадлежности точки к сфере, (точки генерируються ранндомно, а прога перебирает точки и проверяет попала ли она на сферу), а нужно было сферу с точок сгенерировать и поетому я не понял к чему замичание ...Ты получишь 200 векторов (точек), но не все они будут принадлежать к поверхности сферы... теперь понимаю. А длину вектора вычисляю потому что из-за моей невнимательности прога делает совсем иную задачу.
П.С. Длинна нужна для сравнения с радиусом, если равно значить точка на сфере, но повторюсь ето совсем иная задача. Завтра напишу как следует.

Добавлено (04.12.2009, 13:49)
---------------------------------------------
Как и обещал:
class TPoint{
int Q;
int w;
int r;}
//
void main(){
TPoint point[64800];//360*180
randomize;
int k=0,radius=random(200);
for(int i=0;i<=180;i++)
for(int i1=0;i1<=360;i1++)
{point[k]=TPoint;
point[k].Q=i;
point[k].w=i1;
point[k].r=radius;
k++;}
}
Теперь задачка от меня: Есть кубик в пространстве (Вершины задаете сами, можно рандомно),
рандомно разбрасывается гдето 300 точек в пространство, задача скласть прогу для определения
сколько точек попало во внутрь кубика, Ответ вывести в процентах.

Добавлено (04.12.2009, 20:26)
---------------------------------------------
WXZRW ау...

WXZRWДата: Суббота, 05 Декабря 2009, 00:36 | Сообщение # 28
Thousand faces conspiration
Сейчас нет на сайте
karuy,

Завтра ближе к вечеру или раньше как время будет, сегодня просто времени не было.

VinchensooДата: Суббота, 05 Декабря 2009, 06:17 | Сообщение # 29
Злобный социопат с комплексом Бога
Сейчас нет на сайте
Quote (karuy)
Теперь задачка от меня: Есть кубик в пространстве (Вершины задаете сами, можно рандомно),

То бишь считается, что координаты кубика известны?
Над тож подумать smile


WXZRWДата: Суббота, 05 Декабря 2009, 14:03 | Сообщение # 30
Thousand faces conspiration
Сейчас нет на сайте
Quote (Vinchensoo)
То бишь считается, что координаты кубика известны?
Над тож подумать smile

Да тут все понятно, надо просто AABB генерировать, и все, дальше простой тест с точкой, если же вершины рандомно генерить тогда будет OOBB в таком случае потребуется перевести точку в локальное пространство OOBB и потом уже тестить...

Короче вот код я вчера набросал, но сейчас нет времени пока что, я не доделал, потом вобщем :

Code

#include "stdafx.h"
#include <iostream.h>
#include <ctime>

#include <string>

using namespace std;

#define random_float(min,max) ((max - min) * rand()/(float)RAND_MAX + min)

struct vector
{
    float x,y,z;
};

struct box
{
    vector center;

    float slice_half_length;
          
    vector max;
    vector min;
};

int main(int argc, char* argv[])
{
    srand((unsigned int)time(NULL));

    box bb;

    bb.center.x = random_float(1.0,10.0);
    bb.center.y = random_float(1.0,10.0);
    bb.center.z = random_float(1.0,10.0);

    bb.slice_half_length = random_float(5,25);

    /*
    cout << (float) bb.center.x << endl;
    cout << (float) bb.center.y << endl;
    cout << (float) bb.center.z << endl;
    cout << (float) bb.slice_half_length << endl;*/

    return 0;
}

Min и max надо вычислять используя центр бокса и полдлины слайса, и все, потом генеришь точку и тестируешь...

ps. Это на VC++ 6.0, как на других будет компилиться я хз.

PesetsДата: Суббота, 05 Декабря 2009, 14:26 | Сообщение # 31
постоянный участник
Сейчас нет на сайте
Quote (WXZRW)
Да тут все понятно, надо просто AABB генерировать

Хм, а коде у тебя не ААВВ генерится, его же кагбэ поворачивать нельзя, получается...



WXZRWДата: Суббота, 05 Декабря 2009, 14:55 | Сообщение # 32
Thousand faces conspiration
Сейчас нет на сайте
Quote (Pesets)
Хм, а коде у тебя не ААВВ генерится, его же кагбэ поворачивать нельзя, получается...

Там центр и полдлины слайса генерится сейчас. Min и max надо вычислять., т.е. центр +- полдлины. Поворота нет, значит это AABB, я же не вершины генерирую, только центр.

PesetsДата: Суббота, 05 Декабря 2009, 15:05 | Сообщение # 33
постоянный участник
Сейчас нет на сайте
а, все понял, туплю)


karuyДата: Суббота, 05 Декабря 2009, 15:26 | Сообщение # 34
заслуженный участник
Сейчас нет на сайте
WXZRW теперъ твоя очередъ с задачкой smile
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг