forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Алгоритмика (http://forum.boolean.name/forumdisplay.php?f=21)
-   -   Радиус среза круга (http://forum.boolean.name/showthread.php?t=17528)

WISHMASTER35 16.11.2012 20:36

Радиус среза круга
 
Вложений: 1
Как определить радиус круга в точке [0;y]?
Пробовал так
Код:

private float GetRadius(float y) {
  // y = [0, radius]
  float k = y/radius;
  k = (float) Math.cos( Math.toRadians(k*90) );
  return radius*k;
}

Но функция выдает радиус немного меньше, чем реальный.
Т.е. мне нужно вычислить длину зеленой полоски. Сейчас она как видите не верна т.к. не на весь круг. Похоже это правильно зазывается хорда.

moka 16.11.2012 20:41

Ответ: Радиус среза круга
 
Чё?
Лично я вопроса не понял.
Картинка не наглядна, и не объясняет - не помогает понять вопрос.
Ты хочешь вычислить радиус между зелёной полоской и центром (красной точкой)?

Если да, то просто: abs(yA - yB).
Где yA - это y центра окружности, а yB это y зелёной полоски.

Учитывай, что то что ты знаешь - другие не знают. Читать чужие мысли мы пока не научились, следственно выражай мысль с достаточными данными для тех кто вообще не в теме, иначе тебе не помогут.

den 16.11.2012 20:55

Ответ: Радиус среза круга
 
ТС видимо имеет в виду хорду

radiobutton 16.11.2012 21:05

Ответ: Радиус среза круга
 
У круга радиус всегда одинаков. :)

dsd 16.11.2012 21:12

Ответ: Радиус среза круга
 
x*x+y*y-radius*radus = y
x*x = radius*radius - y*y + y

x1=sqrt( radius*radius - y*y + y) x2=-sqrt( radius*radius - y*y + y)

length = x1-x2
А так почему нельзя сделать?

WISHMASTER35 16.11.2012 22:57

Ответ: Радиус среза круга
 
radiobutton, ну я писал про срез круга.
Обновил первый пост. Впрочем как сказал Den это хорда.
dsd, да, все правильно. Спасибо!

private float GetRadius(float y) {
return (float) Math.sqrt( radius*radius - y*y + y);
}

WISHMASTER35 16.11.2012 23:15

Ответ: Радиус среза круга
 
dsd, что-то у меня твои равенства не сходятся.
Код:

int x = 5, y = 10;
int r = 20;
int tmp = x*x+y*y-r*r; // = -275

А должно было быть равным y т.е. 10?

radiobutton 16.11.2012 23:25

Ответ: Радиус среза круга
 
Если y это длина перпендикуляра проведенного к секущей (той твоей линии зеленой) из центра окружности, то длина секущей будит равна

2 * sqrt(r * r - y * y)

где r радиус.

WISHMASTER35 16.11.2012 23:40

Ответ: Радиус среза круга
 
Цитата:

Сообщение от radiobutton (Сообщение 243817)
Если y это длина перпендикуляра проведенного к секущей (той твоей линии зеленой) из центра окружности, то длина секущей будит равна

2 * sqrt(r * r - y * y)

где r радиус.

Странно, но и эта формула работает.
И эта sqrt( radius*radius - y*y + y) работает. Хотя они разные.

impersonalis 16.11.2012 23:46

Ответ: Радиус среза круга
 
если от центра вниз до хорды расстояние Y
то длина хорды = 2*L
где L = катет, в прямоугольном треугольнике с другим катетом, равным Y и гипотенузой R (радиус круга). Отсюда R^2=L^2+Y^2 (т. Пифагора)
или L=sqrt(R^2-Y^2)
длина хорды = 2*sqrt(R^2-Y^2)

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

в крайних точках решение очевидно верное:
1) в самом низу (и верху) Y=-R (или Y=R) => ans=2*sqrt(R^2-R^2)=0
2) в центре Y=0 => ans=2*sqrt(R^2-0)=2*R=D (диаметр)

В обшем - напортачить можно только с вычислением Y, который должен быть равен длине перпендикуляра от центра круга до хорды. Причём модуль брать не обязательно, т.к. величина входит в выражение во второй степени.

dsd 16.11.2012 23:55

Ответ: Радиус среза круга
 
А вот нет, я в виду имел уравнение окружности и прямой, и дальше искал пересечение.

radiobutton 16.11.2012 23:58

Ответ: Радиус среза круга
 
Цитата:

Сообщение от WISHMASTER35 (Сообщение 243823)
Странно, но и эта формула работает.
И эта sqrt( radius*radius - y*y + y) работает. Хотя они разные.

sqrt( radius*radius - y*y + y)
эта формула может работать в частном случае, когда y = 3 * (r*r -y*y)
или

3*y*y + y - 3*r*r = 0

D = 1 - 4 * 3 * (-3 * r * r) = 1 + 48 r*r

y = (-1 +- sqrt(1+48*r*r)) / 6

При такой ситуации та формула будит работать.:)

impersonalis 17.11.2012 00:03

Ответ: Радиус среза круга
 
Цитата:

Сообщение от dsd (Сообщение 243827)
А вот нет, я в виду имел уравнение окружности и прямой, и дальше искал пересечение.

Цитата:

x1=sqrt( radius*radius - y*y + y) x2=-sqrt( radius*radius - y*y + y)

length = x1-x2
Если не ошибаюсь, в выводе произошло смешение y как координаты и как величины перпендикуляра. А так - упрощение даёт похожий результат (проверь).

WISHMASTER35 17.11.2012 00:21

Ответ: Радиус среза круга
 
Я теперь запутался.

MiXaeL 17.11.2012 00:30

Ответ: Радиус среза круга
 
Или я тупой или это:
2*(R^2 - y^2) ?
Типа прямоугольный треугольник, гипотенуза - радиус имеющегося круга, у - катет. Получаем второй катет и домножаем на два - вот и длина зеленой полоски.

АПД: не прочитал коммента radiobutton'a. Но товарищ переключатель дело говорит.
И импер дело говорит, мне крысы наиграли.


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

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