Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование в широком смысле слова > Алгоритмика

Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения

Ответ
 
Опции темы
Старый 16.11.2012, 20:36   #1
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 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;
}
Но функция выдает радиус немного меньше, чем реальный.
Т.е. мне нужно вычислить длину зеленой полоски. Сейчас она как видите не верна т.к. не на весь круг. Похоже это правильно зазывается хорда.
Миниатюры
Нажмите на изображение для увеличения
Название: circle.png
Просмотров: 961
Размер:	1.2 Кб
ID:	18045  

Последний раз редактировалось WISHMASTER35, 16.11.2012 в 22:57.
(Offline)
 
Ответить с цитированием
Старый 16.11.2012, 20:41   #2
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Радиус среза круга

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

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

Учитывай, что то что ты знаешь - другие не знают. Читать чужие мысли мы пока не научились, следственно выражай мысль с достаточными данными для тех кто вообще не в теме, иначе тебе не помогут.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
radiobutton (16.11.2012)
Старый 16.11.2012, 20:55   #3
den
Дэвелопер
 
Аватар для den
 
Регистрация: 13.02.2010
Сообщений: 1,645
Написано 620 полезных сообщений
(для 2,419 пользователей)
Ответ: Радиус среза круга

ТС видимо имеет в виду хорду
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо den за это полезное сообщение:
impersonalis (16.11.2012), SBJoker (16.11.2012), WISHMASTER35 (16.11.2012)
Старый 16.11.2012, 21:05   #4
radiobutton
Бывалый
 
Регистрация: 16.09.2011
Сообщений: 863
Написано 257 полезных сообщений
(для 546 пользователей)
Ответ: Радиус среза круга

У круга радиус всегда одинаков.
(Offline)
 
Ответить с цитированием
Старый 16.11.2012, 21:12   #5
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
WISHMASTER35 (16.11.2012)
Старый 16.11.2012, 22:57   #6
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 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
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 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
radiobutton
Бывалый
 
Регистрация: 16.09.2011
Сообщений: 863
Написано 257 полезных сообщений
(для 546 пользователей)
Ответ: Радиус среза круга

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

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

где r радиус.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
WISHMASTER35 (16.11.2012)
Старый 16.11.2012, 23:40   #9
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 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
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 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 за это полезное сообщение:
radiobutton (16.11.2012), WISHMASTER35 (17.11.2012)
Старый 16.11.2012, 23:55   #11
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Радиус среза круга

А вот нет, я в виду имел уравнение окружности и прямой, и дальше искал пересечение.
(Offline)
 
Ответить с цитированием
Старый 16.11.2012, 23:58   #12
radiobutton
Бывалый
 
Регистрация: 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
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 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
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений
(для 357 пользователей)
Ответ: Радиус среза круга

Я теперь запутался.
(Offline)
 
Ответить с цитированием
Старый 17.11.2012, 00:30   #15
MiXaeL
Бывалый
 
Аватар для MiXaeL
 
Регистрация: 22.08.2006
Сообщений: 700
Написано 146 полезных сообщений
(для 267 пользователей)
Ответ: Радиус среза круга

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

АПД: не прочитал коммента radiobutton'a. Но товарищ переключатель дело говорит.
И импер дело говорит, мне крысы наиграли.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (17.11.2012)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com