Правилен многоъгълник - страни, диагонали, периметър, лице

многоъгълник - брой диагонали
многоъгълник - апотема
многоъгълник - периметър

Изпъкнал многоъгълник с равни вътрешни ъгли и равни дължини на страни е правилен многоъгълник. Често се среща термина правилен N-ъгълник, като с N (естествено число) се означава броя страни в този многоъгълник. За да разберем дали даден многоъгълник е изпъкнал, не е самопресичащ се може да се ползва следния алгоритъм. Избира се връх за начален, както и посока на обхождане. Взема се първата двойка съседни върхове и се прекарва права. Проверява се дали има друг връх, който да лежи на тази права или връх, който да се намира в полуравнина, различна от останалите върхове. Ако многоъгълникът е изпъкнал ще важи следното правило за всяка двойка върхове: само 2 върха лежат на една права, правата през всеки два върха разделя равнината на две и всички останали върхове се намират в една и съща полуравнина.

изпъкнал многоъгълник

изпъкнал многоъгълник


самопресичащ се многоъгълник

самопресичащ се многоъгълник

Брой диагонали в правилен многоъгълник - за N>2 броя диагонали = N*( N - 3)/2 Размер на вътрешен ъгъл в правилен многоъгълник: 180* (1 - 2/N) – в градуси или ( N−2 )* π /N – в радиани. В практиката често се налага изчисляване лице на неправилен многоъгълник. Триангулация на многоъгълник е представянето му като множество триъгълници, чийто страни са или страни в многоъгълника или са вътрешни отсечки за многоъгълника. Ако върховете на многоъгълника са зададени с координати можем да разглеждаме многоъгълника като съвкупност от триъгълници с общ връх. Използвайки алгоритъм на Херон или ориентирано лице лицето на многоъгълника се получава като сума от лицата на съставящите го N-2 броя триъгълници. Най-разпространените задачи за правилен многоъгълник обикновено разглеждат равностранен триъгълник или квадрат. Около всеки правилен многоъгълник може да се опише окръжност. Апотема в многоъгълник е отсечката a, спусната от центъра на многоъгълника перпендикулярно към една негова страна.

Лицето на правилен многоъгълник е S = P * a / 2 – полупроизведението от периметър и апотема.
Ще означим с r радиуса на описана около многоъгълник окръжност.
За правилен многоъгълник: апотема, периметър и лице могат да се изразят като:
a = 2 * r * sin(180/N)
P = 2 * N * r * sin(180/N)
S = 0.5 * r * r * N * sin(360/N)
централен ъгъл yg на дъгата към всяка страна на многоъгълника: yg=360/N
дължина на страна b в многоъгълник изразена чрез радиус на вписана/описана окръжност
b = 2 * R * sim ( yg/2 ), където R е радиус на описаната окръжност
b = 2 * r * tg( yg/2 ), където r е радиус на вписаната окръжност

Начало на страницата

многоъгълник - брой диагонали

Имате изпъкнал N-ъгълник, където N е броят върхове - естествено число от интервала [4..104]. Да се състави програма, чрез която по въведено естествено число N се извежда максималния брой неповтарящи се диагонали в многоъгълника. Пример: 4 Изход: 2

многоъгълник - брой диагонали
Алгоритъм

Всички възможни отсечки в многоъгълника, свързващи всеки два върха са комбинация на n елемента от 2-ри клас - n*(n -1 )/2. От тази стойност трябва да извадим броя страни n, така броя възможни диагонали в такъв многоъгълник е n*(n-3)/2 за всяко n>3. Изключенията с: 0 - няма обект, 1 - данни за точка; 2 - данни за права.

Следващата примерна програма дава решена задача за брой диагонали в многоъгълник:

#include <iostream>
using namespace std;
void broi(int N)
{int m=N*(N-3)/2;
switch (N)
{//nachalo na operatora
   case 0: cout<<"Nqma danni za obekta.\n";break;
   case 1: cout<<"Dannite sa za tochka. \n"; break;
   case 2: cout<<"Dannite sa za prawa\n"; break;
   case 3: cout<<"Dannite sa za triygylnik\n"; break;
   default: cout<<"Broj wyzmovni diagonali: "<<m<<endl; // towa se izpylnqwa
   }//kraj na switch
}//broj

int main()
{//nachalo na programata
   int N;//deklarirane na promenliwata
   char ose;
   cout<<"Imate izpyknal N-ygylnik, w kojto trqbwa da se izchertaqt wsichki\n";
   cout<<"wyzmovni diagonali w mnogoygylnika, no bez powtorenie.\n";
   cout<<"Da se systawi programa, koqto po wywevedeno estestweno chislo w\n";
   cout<<"interwala [4..104] se izchislqwa maksimalniq broj diagonali bez\n";
   cout<<"powtoreniq w mnogoygylnika.\n";
   cout<<"Primer 4 Izhod 2.\n";
   do {
    cout<<"Wywedete broj wyrhowe: ";cin>>N;
 //realno se izchertawat wsichki diagonali ot edin i syshi wryh bes 2-ta sysedni
 //t.e. mogat da se izchertaqt ot edin wryh naj-mnogo N-3 diagonala
     broi(N);cout<<endl;
     cout<<"She wywevdate li drugi danni <y/n>: ";cin>>ose;
   }while (ose=='y');
return 0;/
}//kraj na programata


Начало на страницата

многоъгълник - апотема

Имаме правилен многоъгълник, за който са въведени n - брой страни и m - дължина на страна. Да се изчислят апотемата в този многоъгълник, както и радиуса на описаната окръжност.

многоъгълник - апотема

Алгоритъм

Апотема в правилен многоъгълник е най-късото разстояние между страна от многоъгълника и центъра на вписаната в същия многоъгълник окръжност, т.е. апотемата съвпада с радиуса на вписаната в многоъгълника окръжност. При дадени окръжност и хорда апотемата е перпендикулярът от центъра на окръжността към средата на хордата.
m - страна на правилния многоъгълник
n - брой страни в многоъгълника
R - радиус на описаната окръжност
Дължина на апотема a в правилен многоъгълник: a = m /(2*tan(pi/n)
радиус на описаната около правилен многоъгълник окръжност R =a/ cos(pi/n)

Следващата примерна програма дава решена задача за многоъгълник и апотема:

#include <iostream>
#include <cmath>
using namespace std;
double pi=3.141592;

int main ()
{ int n;
   double m,a,R;
   cout<<"Imame prawilen n-ygylnik, kydeto n e estestweno chislo ot  \n";
   cout<<"interwala [3..101] i predtswlqwa broq wyrhow w mnogoygylnika.\n";
   cout<<"Dylvinata na wsqka ot stranite w mnogoygylnika e m.\n";
   cout<<"Po wywedeni n i m da se izchisli apotemata a i radiusa na \n";
   cout<<"opisanata okolo mnogoygylnika okryvnost.\n";
   cout<<"Primer n=6; m=5 Izhod a= 4.33013; R=5 \n";
   do {
     cout<<"Wywedete broq strani w mnogoygylnika [3..101]: ";cin>>n;
     } while (n<3);//zashita po whod
  cout<<"Wywedete dylvina na stranata: ";cin>>m;
  a = m /(2*tan(pi/n));
  cout<<"Dylvina na apotemata w mnogoygylnika: "<<a<<endl;
  R = a/ cos(pi/n);
  cout<<"Radius na opisanata okryvnost: "<<R<<endl;
  system ("pause");
  return 0;
}//kraj na programata 

Начало на страницата

многоъгълник - периметър

За всеки триъгълник от равнината е валидно твърдението - дължината на най-голямата страна е по-малка от сумата на дължините на останалите страни. Това правило важи и за многоъгълник. Да разгледаме примерна задача за периметър на многоъгълник. Имаме многоъгълник с N броя страни не непременно равни. Дължините на страните са естествени числа. Да се състави програма, чрез която се въвеждат дължините на страните в този многоъгълник и се извежда неговия периметър или съобщение, че тези страни не формират многоъгълник.

Алгоритъм
Въвеждаме N - брой страни в многоъгълника.
В цикъл с брой стъпки N въвеждаме дължината на всяка от страните в този многоъгълник.
Събираме последователно дължината на всяка една страна - натрупваме стойност за периметър.
Последователно проверяваме дали това не е най-голямата страна в многоъгълника.
След края на цикъла проверяваме дали удвоенатта дължина на най-дългата страна е по-малка от изчислената стойност на периметъра в този многоъгълник.
В зависимост от резултата се връща стойността на периметъра или 0 - не е формиран затворен многоъгълник.

Следващата програма дава решена задача за периметър на многоъгълник:

#include <iostream>
#include <cmath>
using namespace std;
   double const pi=3.141592;

int polygon (int N);

int main()
{ int N,P;
    char ose;
    cout<<"Imame izpyknal mnogoygylnik s broj strani N - estestweno chislo >2.\n";
    cout<<"Wywedeni sa N estestweni chisla za dylvini na strani.\n";
    cout<<"Dylvinite na wsqka ot stanite prinadlevi na interwala [1..101].\n";
    cout<<"Da se systawi programa, chrez koqto se wywevdat stranite i se\n";
    cout<<"izwevda perimetyra na mnogoygylnika, ako toj e izpyknal.\n";
    cout<<"Primer: N=5; 1,2,3,4,8 Izhod: 18\n";
    do {
       cout<<"Wywedete broj strani: ";cin>>N;
       P = polygon (N); //izchislqwa perimetyr na mnogoygylnik
       if (P)
       cout<<"perimetyr na mnogoygylnik "<<P<<endl;
       else cout<<"wywedenite strani ne formirat izpyknal mnogoygylnik!\n";
       cout<<"She wywevdate li drugi danni <y/n>: ";cin>>ose;
    } while (ose=='y'); 
system("pause");

return 0;
}//kraj na programa mnogoygylnik 

int polygon (int N)
{int i, p, ma_x, strana , perimetyr =0 ;
    cout<<"Wywedete dylvina na strana: ";cin>>strana;
    ma_x = p = strana ; //nachalna inicializaciq - izbor na maksimalen element
    for (i=1;i<N;i++)
      { cout<<"Wywedete dylvina na strana: ";cin>>strana;
       if (ma_x<strana) ma_x=strana;// naj-dylga strana w mnogoygylnik
       p+=strana; // danni za perimetyr 
     } // broj strani w mnogoygylnik   
     if (p>2*ma_x) perimetyr = p; //perimetyr > 2 * naj-dylgata strana w mnogoygylnik 
 return perimetyr ;
} // kraj polygon 

Обяснени и решени задачи с подобни алгоритми, функции и служебни думи са разгледани в страницата с електронни уроци по информатика - програмиране.
Илюстриране работата на характерни алгоритми можете да намерите в предоставените електронни помагала съдържащи решени задачи, примери.

Начало на страницата

 
Размер на шрифта
Increase Font Size Option 3 Reset Font Size Option 3 Decrease Font Size Option 3
Bulgarian Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish
Търсене в сайта: