Loading...
Yavor2012 avatar Yavor2012 15 Точки

[Homework] Programming Basics - Operators and Expressions - Problem {10} Point inside the Circle and outside the Triangle

Здравейте колеги,

Искам да ви задам въпрос във връзка със задача номер 10 от домашната работа по тема Оператори и изрази. Въпросът е да определим дали точка е в кръг и извън триъгълник. Това което ме интересува като въпрос не е някакво конкретно решение , а по-скоро, ако е удобно, да споделите как трябва да се действа при тази задача, говоря като стъпки. Благодаря ви за помоща!

Тагове:
0
Programming Basics 08/03/2015 13:12:29
BTreppechov avatar BTreppechov 5 Точки

Ето как аз бих го направил.

1.Въвеждаш от конзолата стойността на х и у.
2.После бих направил 2 boolean-a  
   - 1вия ,когато е в кръга        (x - 1) * (x - 1) + (y - 1) * (y - 1) <= (1.5 * 1.5);
   -2рия ,когато е извън него    x > 1 || x < 6 && y > -1 || y < 2;   

3. И после правиш с if statements 
когато bool 1 и 2 са верни да ти изпише да - yes

ако не са верни 
т.е  else  - да ти изпише не - no

а да също така и примерно ,ако х и у са нули да ти изпише - не .

ПС: Малка поправка , втория булеан трябва да е , когато е извън триъгълника или там каквато фигура беше

2
08/03/2015 04:32:32
GalyaGeorgieva avatar GalyaGeorgieva 88 Точки

1. Аз първо изчислявам хипотенузата на въображаемия триъгълник, който се образува при т.Х, т.У и т.К(1,1)

забележи, че центъра на координатната система не е центъра на кръга, т.е ще трябва от тук нататък да вадим "-1" от Х и У. (заложила съм да се получават абсолютни стойности (Math.Abs), за да не стане  отрицателно число и после грешка в събирането)

double hipo= Math.Sqrt(Math.Abs((x - 1) * (x - 1)) + (Math.Abs(y - 1) * (y - 1)));

2. Проверявам дали  точката е в окръжността като проверявам хипотенузата hipo дали е по-малка или равна на радиуса на кръга, т.е. 1,5

        bool insideCircle = hipo<=1,5

3. Проверявам дали точката е извън правоъгълника

        bool outsideRectangle = x>=-1 || x>=5 && y>=-1|| y>=1;

4. Ако и двата bool са true - отговор Yes

3
08/03/2015 12:07:38
Alezard avatar Alezard 7 Точки

bool outsideRectangle = x>=-1 || x>=5 && y>=-1|| y>=1;

Този код не трябва ли да е в рамките на x >= -1 и x <= 5, и y >= -1 и y <= 1? Защото така всеки път ще проверява точките в правоъгълника и извън него от (-1, -1)  до някъде там (колкото памет имаме).

0
GalyaGeorgieva avatar GalyaGeorgieva 88 Точки

Да, Alezard прав си. Сгрешила съм в изписването на логиката. Твоят начин е верен, но доколкото виждам той проверява дали е вътре в правоъгълника и тогава ще трябва да използваме bool outsideRectangle с обратен знак, т.е:

ако точката е в окръжността bool outsideRectangle = true

ако точката е в правоъгълника bool outsideRectangle =  true и за да го направим  коректно към заданието, т.е да е вън от правоъгълника го правим с запис:

bool insideCircle &&  !outsideRectangle, за да "докараме" false накрая :)

Благодаря за корекцията:)

1
nickpanaiotov avatar nickpanaiotov 21 Точки

Тъй като гледам, че всички са ти разбрали въпроса правилно и въобще не са ти дали конкретно решение...

Това което ме интересува като въпрос не е някакво конкретно решение , а по-скоро, ако е удобно, да споделите как трябва да се действа при тази задача, говоря като стъпки.

Та, в тази задача като цяло има два подхода единият е "devide and conquer", този който са ти предложили колегите ти. 

Намираш дали точката се намира в едната фигура после тестваш дали я има в другата фигура и накрая събираш решенията. Използва се на много места в програмирането. Лошото е, че ако имаш един милион фигури и може и да не свърши много работа.

Вторият според мен тук е по удачен, а той е да намериш алгоритъм който ти решава проблема като цяло и да се опиташ да го имплементираш за конкретния случай. Това също е основнен дял в програмирането. Имаш проблем който не можеш да решиш, търсиш в нета намираш решение и се опитваш да го имплементираш за конретния проблем.

Може да направиш един сърч в гуглето. Point inside the polygon е добре известен проблем и хората му търсят решение отдавна. 

http://en.wikipedia.org/wiki/Point_in_polygon

Когато имах това домашно мъчих доста rey casting алгоритъма, и що горе заработи за задоволитен брой от случаите.

Имплементирането на чудж алгоритъм е изживяване което всеки програмист рано или късно трябва да изстрада :D

 

 

0
GalyaGeorgieva avatar GalyaGeorgieva 88 Точки

Извинявай колега, но сме се опитали да помогнем както можем. Като гледам Yavor2012 иска няколко логически стъпки, така че коментарът ти към нас не е много коректен.

1
nickpanaiotov avatar nickpanaiotov 21 Точки

Здравей, не съм искал да обидя никого, не знам как си го прочела. Просто споделям мнение по проблем, който ми се струваше интересен когато трябваше аз да го решавам.

Честит празник : )

И поздрави

0
Yavor2012 avatar Yavor2012 15 Точки

Колеги благодаря за предоставената информация. Сядам да се мъча да видя какви ще ги съчиня:)

0
DimitarSkripkin avatar DimitarSkripkin 5 Точки

Ако все пак ти е интересно да провериш дали е в триъгълник

bool b1,b2,b3;
b1 = ((ptX - v2X) * (v1Y - v2Y) - (v1X - v2X)*(ptY - v2Y) < 0.0f;
b2 = ((ptX - v3X) * (v2Y - v3Y) - (v2X - v3X)*(ptY - v3Y) < 0.0f;
b3 = ((ptX - v1X) * (v3Y - v1Y) - (v3X - v1X)*(ptY - v3Y)) < 0.0f;

Където:
-ptX и ptY са координатите на точката която проверяваш
-v1X, v1Y, v2X, v2Y, v3X и v3Y са координатите на върховете на триъгълника

Ако b1 е равно на b2 и b2 е равно на b3 зна4и е в триъгълника.

Осваналите стъпки са ти ги написали.

2
10/03/2015 08:01:20
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.