[/b/] [/d/] [/tu/] [/a/] [/ph/] [/wa/] [/cg/] [/t/] [/p/]
Рубрика глупых вопросов, наследница рубрики с похожим названием получает воплощение в этом треде. А вопрос у нас сегодня будет конкретнее, чем обычно, хотя и не лишённый неоднозначности и недосказанности. И так, условие задачи. Есть сфера, в ней каким-то образом разбросаны точки. Мы выделяем некоторую область сферы, задавая минимальные и максимальные значения всех трёх сферических координат, радиуса, склонения и прямого восхождения. Мы говорим о том, что эта область будет интересующим нас выделенным объёмом и отбираем точки которые в него попадают. Теперь самое главное. Мы хотим научиться находить число точек в цилиндрах описанных около точек выборки, предельно больших, но не выходящих за границы рассматриваемого объёма и ориентированных определённым образом относительно центра оригинальной сферы. Цилиндры у нас немного хитрые. Они будут прямые круговые, но образующая и радиус основания будут линейно связаны. Т.е. мы устанавливаем некоторую сетку значений радиуса основания r=r1:r2, и тогда образующая h для каждого r находится из линейного соотношения h=\alpha r, где \alpha -- произвольный параметр.Суть задачи состоит в том, чтобы для каждой точки найти максимальное значение r[i], при котором цилиндр с центром в этой точке и ориентированный под углом \beta к радиусу изначальной сферы, проходящей через эту точку, не выходил бы за границы рассматриваемого объёма. Ну и нужно уметь считать число точек, которые попадают в этот цилиндр. По сути всё. Пояснение: про ориентацию цилиндров, прежде всего, задачу необходимо решить для случая \beta = 0 и 90. При этом автор задачи понимает, что при \beta != 0 существует неоднозначность и просит не заморачиваться и определиться, что центральная ось цилиндра должна оставаться в одной плоскости с радиус вектором рассматриваемой точки. Вот как-то так.
>>91851Для каждой точки находим рдиус цилиндра, при котором он имеет только одну точку пересечения с интересующим объемом @ считаем количество точек внутри него.
>>91852Это в известной степени очевидно, интересуют формулы, мой друг.
>>91854А они зависят от функций области заданного объема и ориентации цилиндров.
>>91855Твои слова, конечно, верны, но пока бесполезны. Дядь, в условии чётко определено как выделяется объём и как цилиндры ориентированны: границы это три пары величин: предельные значения сферических координат, цилиндры ориентированны как угодно, любой случай интересен. Для начала можно сделать только для цилиндров сонаправленных с радиус вектором, это самый простой вариант. Требуются вычисления для хоть какого-нибудь случая, а не общие слова.
>>91856Если у тебя область интереса задана как r1..r2, θ1..θ2, φ1..φ2 и цилиндр сонаправлен с вектором r то тут все просто:цилиндр может соприкачаться с областью интереса только дальней стенкой, следовательно:sqrt((r_pount+h/2)^2+(r_point+\alpha*h)^2)=r2;θ1<=θ_point-arcsin(\alpha*h/(r_pount+h/2));θ_point+arcsin(\alpha*h/(r_pount+h/2))<=θ2;φ1<=φ_point-arcsin(\alpha*h/(r_pount+h/2));φ_point+arcsin(\alpha*h/(r_pount+h/2))<=φ2;И хотябы одно из <= должно быть =
>>91858А не, верхней влоскостью тоже может контачить, тогда так:r1<=r_point-h/2;sqrt((r_pount-h/2)^2+(\alpha*h)^2)=r2;θ1<=θ_point-arcsin(\alpha*h/(r_pount-h/2));θ_point+arcsin(\alpha*h/(r_pount-h/2))<=θ2;φ1<=φ_point-arcsin(\alpha*h/(r_pount-h/2));φ_point+arcsin(\alpha*h/(r_pount-h/2))<=φ2;sqrt((r_pount+h/2)^2+(\alpha*h)^2)=r2;θ1<=θ_point-arcsin(\alpha*h/(r_pount+h/2));θ_point+arcsin(\alpha*h/(r_pount+h/2))<=θ2;φ1<=φ_point-arcsin(\alpha*h/(r_pount+h/2));φ_point+arcsin(\alpha*h/(r_pount+h/2))<=φ2. + несколько быстрофиксов
>>91858А не, верхней влоскостью тоже может контачить, тогда так:
r1<=r_point-h/2;sqrt((r_pount-h/2)^2+(\alpha*h)^2)=r2;θ1<=θ_point-arcsin(\alpha*h/(r_pount-h/2));θ_point+arcsin(\alpha*h/(r_pount-h/2))<=θ2;φ1<=φ_point-arcsin(\alpha*h/(r_pount-h/2));φ_point+arcsin(\alpha*h/(r_pount-h/2))<=φ2;sqrt((r_pount+h/2)^2+(\alpha*h)^2)=r2;θ1<=θ_point-arcsin(\alpha*h/(r_pount+h/2));θ_point+arcsin(\alpha*h/(r_pount+h/2))<=θ2;φ1<=φ_point-arcsin(\alpha*h/(r_pount+h/2));φ_point+arcsin(\alpha*h/(r_pount+h/2))<=φ2.
+ несколько быстрофиксов
>>91858Спасибо. >цилиндр может соприкасаться с областью интереса только дальней стенкойнет, он может касаться всех поверхностей. Как ближней так и дальней "стенок" и может выходить за пределы рассматриваемых углов. >следовательно:sqrt((r_pount+h/2)^2+(r_point+\alpha*h)^2)=r2;здесь, мне кажется, по ошибке во вторую скобку затесалось r_point. >θ1<=θ_point-arcsin(\alpha*h/(r_pount+h/2));>θ_point+arcsin(\alpha*h/(r_pount+h/2))<=θ2;>φ1<=φ_point-arcsin(\alpha*h/(r_pount+h/2));>φ_point+arcsin(\alpha*h/(r_pount+h/2))<=φ2;почему арксинус? P.S. Прошу избегать слова "просто".
>>91858Спасибо.
>цилиндр может соприкасаться с областью интереса только дальней стенкой
нет, он может касаться всех поверхностей. Как ближней так и дальней "стенок" и может выходить за пределы рассматриваемых углов.
>следовательно:
sqrt((r_pount+h/2)^2+(r_point+\alpha*h)^2)=r2;здесь, мне кажется, по ошибке во вторую скобку затесалось r_point.
>θ1<=θ_point-arcsin(\alpha*h/(r_pount+h/2));>θ_point+arcsin(\alpha*h/(r_pount+h/2))<=θ2;>φ1<=φ_point-arcsin(\alpha*h/(r_pount+h/2));>φ_point+arcsin(\alpha*h/(r_pount+h/2))<=φ2;
почему арксинус? P.S. Прошу избегать слова "просто".
>>91861См фикс выше.> почему арксинус?Чтобы найти максимальный угол между вектором r_point и самой дальней частью плоскости.> P.S. Прошу избегать слова "просто".Это очень простой случай же. Если добавить угол между вектором r_point и осью цилиндра повылазит куча матанов и частных случаев.
>>91861См фикс выше.
> почему арксинус?
Чтобы найти максимальный угол между вектором r_point и самой дальней частью плоскости.
> P.S. Прошу избегать слова "просто".
Это очень простой случай же. Если добавить угол между вектором r_point и осью цилиндра повылазит куча матанов и частных случаев.
>>91863>>>φ_point+arcsin(\alpha*h/(r_pount+h/2))<=φ2;>>почему арксинус?>Чтобы найти максимальный угол между вектором r_point и самой дальней частью плоскости.Я тебя не понял. просто мне кажется, что это отношение катетов и арксинус от этого не самая осмысленная величина. >Это очень простой случай же. проблема в том, что даже в этом простом случае легко ошибиться.
>>91863
>>>φ_point+arcsin(\alpha*h/(r_pount+h/2))<=φ2;>>почему арксинус?>Чтобы найти максимальный угол между вектором r_point и самой дальней частью плоскости.
Я тебя не понял. просто мне кажется, что это отношение катетов и арксинус от этого не самая осмысленная величина.
>Это очень простой случай же.
проблема в том, что даже в этом простом случае легко ошибиться.
>>91864> просто мне кажется, что это отношение катетов и арксинус от этого не самая осмысленная величинаТочно, вместо (r_pount+h/2) надо sqrt((r_point+h/2)^2+(\alpha*h)^2).
>>91864
> просто мне кажется, что это отношение катетов и арксинус от этого не самая осмысленная величина
Точно, вместо (r_pount+h/2) надо sqrt((r_point+h/2)^2+(\alpha*h)^2).
Либо вместо arcsin arctg.
>>91855На этой картинке не хватает иконы у Ивана в руках.
>>91876Ты не смотрел рейлдекс
>>91879Цветы на голове Уихару ненастоящие.
дарова, мне в ближайшее время лень думать, поэтому спрошу, вдруг кому-то делать нечего пять минут. Вопрос такой: как задать набор положений цилиндров и для каждого уметь считать число точек в нём.Это простая аналитическая геометрия, есть точка, из неё мы проводим линию в выбранной плоскости под заданным углом к радиус вектору и считаем расстояния от остальных точек до этой прямой. Формулу бы. У меня руки уже неделю до этого не доходят, а может получится круто.
>>92041Цилиндры по прежнему соосны радиус-вектору (и все остальные данные брать из предыдущей задачи) или нет?
>>92042нет, цилиндры ориентированны под заданным углом к радиус вектору. Пускай при этом их центры будут с радиус вектором в одной плоскости, ортогональной плоскость xy.
кстати, если интересно: я решил не мучится с границами и для каждой точки посчитал радиус максимальной сферы с центром в этой точке, которая бы влезла в объём. Ну и цилиндры не должны выходить за эту сферу.
>>92043> Пускай при этом их центры будут с радиус вектором в одной плоскости, ортогональной плоскость xyИли я уже настолько в невыспавшимся состоянии, что совсем не соображаю или для любой точки можно построить на которой будет лежать радиус-вектор и которая будет ортогональна плоскости xy (которая θ=90°).>>92044А для второй задачи цилиндры упростить до сферы не получится?
>>92043
> Пускай при этом их центры будут с радиус вектором в одной плоскости, ортогональной плоскость xy
Или я уже настолько в невыспавшимся состоянии, что совсем не соображаю или для любой точки можно построить на которой будет лежать радиус-вектор и которая будет ортогональна плоскости xy (которая θ=90°).>>92044А для второй задачи цилиндры упростить до сферы не получится?
>>92045По ходу тебе реально стоит поспать. >>92043> Пускай при этом их центры будут с радиус вектором в одной плоскости, ортогональной плоскость xy>Или я уже настолько в невыспавшимся состоянии, что совсем не соображаю или для любой точки можно построить на которой будет лежать радиус-вектор и которая будет ортогональна плоскости xy (которая θ=90°).Явно слово пропустил. Плоскость? Ну, для любой точки такая плоскость есть. Она будет неоднозначно определена только в полюсе, но хрен с ним. >>92044>А для второй задачи цилиндры упростить до сферы не получится?для второй задачи него упрощать до сферы, в этой второй ничего не нужно делать с границами и чем-то подобным. Просто нужно определиться как ориентировать цилиндр относительно радиус вектора и уметь считать точки, которые в него попали.
>>92045По ходу тебе реально стоит поспать. >>92043
> Пускай при этом их центры будут с радиус вектором в одной плоскости, ортогональной плоскость xy>Или я уже настолько в невыспавшимся состоянии, что совсем не соображаю или для любой точки можно построить на которой будет лежать радиус-вектор и которая будет ортогональна плоскости xy (которая θ=90°).
Явно слово пропустил. Плоскость? Ну, для любой точки такая плоскость есть. Она будет неоднозначно определена только в полюсе, но хрен с ним. >>92044
>А для второй задачи цилиндры упростить до сферы не получится?
для второй задачи него упрощать до сферы, в этой второй ничего не нужно делать с границами и чем-то подобным. Просто нужно определиться как ориентировать цилиндр относительно радиус вектора и уметь считать точки, которые в него попали.
>>92048Плоскость, да. Пойду посплю пожалуй, а то я уже явный бред несу.
r_p, θ_p, φ_p - координаты центра цилиндраθ_c, φ_c - склонение оси цилиндраr - радиус основания цилиндраh - высота цилиндраr_t, θ_t, φ_t - координаты проверяемой точкиПереносим центр оси координат в центр цилиндра. Тогда координаты центра цилиндра в новой оси будут нулевыми, для проверяемой точки:r_n=sqrt((r_p*sin(θ_p)*cos(φ_p)-r_t*sin(θ_t)*cos(φ_t))^2+(r_p*sin(θ_p)*sin(φ_p)-r_t*sin(θ_t)*sin(φ_t))^2+(r_p*cos(θ_p)-r_t*cos(θ_t))^2);θ_n=acos((r_p*cos(θ_p)-r_t*cos(θ_t))/r_n);φ_n=acos((r_p*cos(φ_p)*sin(φ_p)-r_t*cos(φ_t)*sin(φ_t))/r_n). А потом проверяем, не вышла ли точка за цилиндр, по новым координатам это сделать проще:h/2<=r_n*cos( 2*asin(sqrt( (sin(θ_c)*cos(φ_c)-sin(θ_n)*cos(φ_n))^2 + (sin(θ_c)*sin(φ_c)-sin(θ_n)*sin(φ_n))^2 + (cos(φ_c)-cos(φ_n))^2 )) );r<=r_n*sin( 2*asin(sqrt( (sin(θ_c)*cos(φ_c)-sin(θ_n)*cos(φ_n))^2 + (sin(θ_c)*sin(φ_c)-sin(θ_n)*sin(φ_n))^2 + (cos(φ_c)-cos(φ_n))^2 )) );
r_p, θ_p, φ_p - координаты центра цилиндраθ_c, φ_c - склонение оси цилиндраr - радиус основания цилиндраh - высота цилиндраr_t, θ_t, φ_t - координаты проверяемой точки
Переносим центр оси координат в центр цилиндра. Тогда координаты центра цилиндра в новой оси будут нулевыми, для проверяемой точки:r_n=sqrt((r_p*sin(θ_p)*cos(φ_p)-r_t*sin(θ_t)*cos(φ_t))^2+(r_p*sin(θ_p)*sin(φ_p)-r_t*sin(θ_t)*sin(φ_t))^2+(r_p*cos(θ_p)-r_t*cos(θ_t))^2);θ_n=acos((r_p*cos(θ_p)-r_t*cos(θ_t))/r_n);φ_n=acos((r_p*cos(φ_p)*sin(φ_p)-r_t*cos(φ_t)*sin(φ_t))/r_n).
А потом проверяем, не вышла ли точка за цилиндр, по новым координатам это сделать проще:h/2<=r_n*cos( 2*asin(sqrt( (sin(θ_c)*cos(φ_c)-sin(θ_n)*cos(φ_n))^2 + (sin(θ_c)*sin(φ_c)-sin(θ_n)*sin(φ_n))^2 + (cos(φ_c)-cos(φ_n))^2 )) );r<=r_n*sin( 2*asin(sqrt( (sin(θ_c)*cos(φ_c)-sin(θ_n)*cos(φ_n))^2 + (sin(θ_c)*sin(φ_c)-sin(θ_n)*sin(φ_n))^2 + (cos(φ_c)-cos(φ_n))^2 )) );
- wakaba 3.0.7 + futaba + futallaby -