|
Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения |
16.11.2012, 20:36
|
#1
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Радиус среза круга
Как определить радиус круга в точке [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;
}
Но функция выдает радиус немного меньше, чем реальный.
Т.е. мне нужно вычислить длину зеленой полоски. Сейчас она как видите не верна т.к. не на весь круг. Похоже это правильно зазывается хорда.
Последний раз редактировалось WISHMASTER35, 16.11.2012 в 22:57.
|
(Offline)
|
|
16.11.2012, 20:41
|
#2
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Радиус среза круга
Чё?
Лично я вопроса не понял.
Картинка не наглядна, и не объясняет - не помогает понять вопрос.
Ты хочешь вычислить радиус между зелёной полоской и центром (красной точкой)?
Если да, то просто: abs(yA - y .
Где yA - это y центра окружности, а yB это y зелёной полоски.
Учитывай, что то что ты знаешь - другие не знают. Читать чужие мысли мы пока не научились, следственно выражай мысль с достаточными данными для тех кто вообще не в теме, иначе тебе не помогут.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
16.11.2012, 20:55
|
#3
|
Дэвелопер
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений (для 2,419 пользователей)
|
Ответ: Радиус среза круга
ТС видимо имеет в виду хорду
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо den за это полезное сообщение:
|
|
16.11.2012, 21:05
|
#4
|
Бывалый
Регистрация: 16.09.2011
Сообщений: 863
Написано 257 полезных сообщений (для 546 пользователей)
|
Ответ: Радиус среза круга
У круга радиус всегда одинаков.
|
(Offline)
|
|
16.11.2012, 21:12
|
#5
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Радиус среза круга
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
А так почему нельзя сделать?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
16.11.2012, 22:57
|
#6
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Ответ: Радиус среза круга
radiobutton, ну я писал про срез круга.
Обновил первый пост. Впрочем как сказал Den это хорда.
dsd, да, все правильно. Спасибо!
private float GetRadius(float y) {
return (float) Math.sqrt( radius*radius - y*y + y);
}
|
(Offline)
|
|
16.11.2012, 23:15
|
#7
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Ответ: Радиус среза круга
dsd, что-то у меня твои равенства не сходятся.
int x = 5, y = 10;
int r = 20;
int tmp = x*x+y*y-r*r; // = -275
А должно было быть равным y т.е. 10?
|
(Offline)
|
|
16.11.2012, 23:25
|
#8
|
Бывалый
Регистрация: 16.09.2011
Сообщений: 863
Написано 257 полезных сообщений (для 546 пользователей)
|
Ответ: Радиус среза круга
Если y это длина перпендикуляра проведенного к секущей (той твоей линии зеленой) из центра окружности, то длина секущей будит равна
2 * sqrt(r * r - y * y)
где r радиус.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
16.11.2012, 23:40
|
#9
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Ответ: Радиус среза круга
Сообщение от radiobutton
Если y это длина перпендикуляра проведенного к секущей (той твоей линии зеленой) из центра окружности, то длина секущей будит равна
2 * sqrt(r * r - y * y)
где r радиус.
|
Странно, но и эта формула работает.
И эта sqrt( radius*radius - y*y + y) работает. Хотя они разные.
|
(Offline)
|
|
16.11.2012, 23:46
|
#10
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Радиус среза круга
если от центра вниз до хорды расстояние 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, который должен быть равен длине перпендикуляра от центра круга до хорды. Причём модуль брать не обязательно, т.к. величина входит в выражение во второй степени.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
|
|
16.11.2012, 23:55
|
#11
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Радиус среза круга
А вот нет, я в виду имел уравнение окружности и прямой, и дальше искал пересечение.
|
(Offline)
|
|
16.11.2012, 23:58
|
#12
|
Бывалый
Регистрация: 16.09.2011
Сообщений: 863
Написано 257 полезных сообщений (для 546 пользователей)
|
Ответ: Радиус среза круга
Сообщение от WISHMASTER35
Странно, но и эта формула работает.
И эта 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
При такой ситуации та формула будит работать.
|
(Offline)
|
|
17.11.2012, 00:03
|
#13
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Радиус среза круга
Сообщение от dsd
А вот нет, я в виду имел уравнение окружности и прямой, и дальше искал пересечение.
|
x1=sqrt( radius*radius - y*y + y) x2=-sqrt( radius*radius - y*y + y)
length = x1-x2
|
Если не ошибаюсь, в выводе произошло смешение y как координаты и как величины перпендикуляра. А так - упрощение даёт похожий результат (проверь).
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
17.11.2012, 00:21
|
#14
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Ответ: Радиус среза круга
Я теперь запутался.
|
(Offline)
|
|
17.11.2012, 00:30
|
#15
|
Бывалый
Регистрация: 22.08.2006
Сообщений: 700
Написано 146 полезных сообщений (для 267 пользователей)
|
Ответ: Радиус среза круга
Или я тупой или это:
2*(R^2 - y^2) ?
Типа прямоугольный треугольник, гипотенуза - радиус имеющегося круга, у - катет. Получаем второй катет и домножаем на два - вот и длина зеленой полоски.
АПД: не прочитал коммента radiobutton'a. Но товарищ переключатель дело говорит.
И импер дело говорит, мне крысы наиграли.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:27.
|