1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
//C++ 3.1 Листинг #1 MS-DOS Перпендикулярные прямые по трём точкам #include <graphics.h> //Для работы с графическими функциями #include <iostream.h> //Для работы с потоковым вводом-выводом #include <math.h> //Для работы с математическими функциями struct Point{ double x,y; }; //Наш тип данных Point (Точка) double k = 0, b = 0, d = 0; //k Угловой коэффициент, b и d смещения двух прямых void input(Point &T1,Point &T2,Point &T3){ T1.x = 133; T1.y = 99; //Координаты первой точки T2.x = 200; T2.y = 177; //Координаты второй точки k = (T2.y - T1.y) / (T2.x - T1.x); //Сразу после указания параметров расчет углового коэффициента b = (T2.x * T1.y - T1.x * T2.y) / (T2.x - T1.x); //И расчет смещения первой прямой T3.x = 330; //Координаты третей точки T3.y = T3.x*k+b; //Я решил положить точку на прямую d = T3.y + ((1 / k) * T3.x); //Из теорем о перпендикулярных прямых //Отображаю выбранные точки на экране circle(T1.x,T1.y,3); circle(T2.x,T2.y,3); circle(T3.x,T3.y,10); } int main() { int gd = DETECT,gm; //Переменные для инициализации графического режима initgraph(&gd,&gm,""); //Инициализация графического режима Point T1,T2,T3; //Три точки input(T1,T2,T3); //Функция ввода координат точек for (int x=0; x<getmaxx(); x++){ lineto(x, (-1/k) * x + d); //Выводим перпендикуляр для Т1-Т2 } moveto(0,b); //перемещаем перо для рисования прямой по первым двум точкам for (x = 1; x<getmaxx(); x++){ lineto(x,k*x+b); //Выводим прямую (Т1-Т2) } cin.get(); closegraph(); //Заканчиваем работу в графическом режиме } |
🙂 🙂 🙂 🙂 🙂 🙂 🙂