Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 12.06.2009
Сообщений: 3
1

Определение трассы пути движения точки на плоскости

12.06.2009, 16:56. Просмотров 843. Ответов 4
Метки нет (Все метки)

Добрый день! С праздником всех!! Помогите поалуйста решить задачу.. Делал в Borland C++ 3.1 после ввода значений точек А и В автоматически вылетает из окна вывода результата.. вот текст программы:
Код
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <dos.h>
#include <stdio.h>
struct point
{float x,y;
};
struct koord
{
float xu;
float yu;
float xd;
float yd;
};

void main()
{  clrscr();
float y,x, s, k, l;
s=1;
int i,j;
struct koord kv[5][5];
  kv[0][0].yd=0;
  kv[0][0].xd=0;
 kv[0][0].yu=kv[0][0].yd+s;
kv[0][0].xu=kv[0][0].xd+s;

  for(i=0;i<5;i++)
  { 
       
    for(j=1;j<5;j++)
   {
       kv[i][j].xd=kv[i][j-1].xu;
          kv[i][j].yd=kv[i-1][j].yu;
 
       kv[i][j].xu=kv[i][j-1].xu+s;
          kv[i][j].yu=kv[i-1][j].yu; 
  printf("KV xd=%.0f, yd=%.0f, xu=%.0f, yu=%.0f\n",kv[i][j].xd, kv[i][j].yd, kv[i][j].xu, kv[i][j].yu);
} 
  }

   struct point A,B;
       printf ("Vvedite koord A(x,y)\n");
    scanf ("%f%f",&A.x,&A.y);
       printf ("Vvedite koord B(x,y)\n");
    scanf ("%f%f",&B.x,&B.y);

  float xmin, xmax, ymin, ymax;


  if(A.x<B.x)
  {
    xmin=A.x;
    xmax=B.x;
  }
    else
    {
    xmin=B.x;
    xmax=A.x;
    }

	if(A.y<B.y)
	 {
	   ymin=A.y;
	   ymax=B.y;
	 }
	 else
	 {
	   ymin=B.y;
	   ymax=A.y;
	 }
for(i=0;i<5;i++)
		{


			for(j=0;j<5;j++)
			   {    if(xmin<kv[i][j].xu&&xmin>kv[i][j].xd&&ymin<kv[i][j].yu&&ymin>kv[i][j].yd)
			    printf("Kvadrat tochki A= %d  %d\n",i+1,j+1);
			     else
				  if(xmax<kv[i][j].xu&&xmax>kv[i][j].xd&&ymax<kv[i][j].yu&&ymax>kv[i][j].yd)
				     printf ("Kvadrat tochki B= %d  %d\n",i+1,j+1);}}

if(B.x!=A.x)
{
	l=(B.y-A.y)/(B.x-A.x);
	for(i=0;i<5;i++)
	{


		for(j=0;j<5;j++)
		{


			k=(kv[i][j].yu-kv[i][j].yd)/(kv[i][j].xu-kv[i][j].xd);
			if(k!=l||-k!=l)
				{
					x=(k*kv[i][j].xd-l*A.x+A.y-kv[i][j].yd)/(k-l);
					y=(((x-kv[i][j].xd)*(kv[i][j].yu-kv[i][j].yd))/(kv[i][j].xu-kv[i][j].xd))+kv[i][j].yd;
				if(x<xmax&&x>xmin&&y<ymax&&y>ymin&&x<kv[i][j].xu&&x>kv[i][j].xd&&y<kv[i][j].yu&&y>kv[i][j].yd)
				 {
					printf("Kvadrat %d  %d\n",i+1,j+1);
				 }
				else
				{
					x=(-k*kv[i][j].xu-l*A.x+A.y-kv[i][j].yd)/(-k-l);
					y=(((x-kv[i][j].xu)*(kv[i][j].yu-kv[i][j].yd))/(kv[i][j].xd-kv[i][j].xu))+kv[i][j].yd;
					if(x<xmax&&x>xmin&&y<ymax&&y>ymin&&x<kv[i][j].xu&&x>kv[i][j].xd&&y<kv[i][j].yu&&y>kv[i][j].yd)
					{
						printf("Kvadrat %d  %d\n",i+1,j+1);
					}
				}
			}
			else
			{
					printf("Kvadrat %d  %d\n",i+1,j+1);
			}
		}
	}
}
else
{
     for(i=0;i<5;i++)
     for(j=0;j<5;j++)               if(kv[i][j].xd<xmax&&kv[i][j].xu>xmin&&kv[i][j].yd<ymax&&kv[i][j].yu>ymin)

		    printf("Kvadrat %d  %d\n",i+1,j+1);
}
     getch();

}
Добавлено через 1 минуту 12 секунд
где k-коэффициент диагонали квадрата, l-коэффициент прямой проходящей через эти квадраты
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.06.2009, 16:56
Ответы с готовыми решениями:

Составить функцию движения точки на плоскости
Здравствуйте, на плоскости даны точки А и B. Точка А движется в одном направлении с постоянной...

Определение ускорения движения заданной точки
Здравствуйте подскажите с чего следует начать при &quot; определении ускорения движения заданной точки&quot;...

Определение траектории движения материальной точки
Доброго времени суток! Задача следующая: необходимо определить траекторию материальной точки на...

Определение точки в плоскости
Даны две точки на плоскости. Определить «самую левую», «самую правую», «самую верхнюю», «самую...

4
2341 / 497 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
12.06.2009, 17:25 2
В Borland C++ 3.1 в меню Run кнопочки есть такие: "Go to cursor", "Trace into", "Step Over"...
Они предназначены для отладки программы.
И позволяют найти строку с ошибкой.
И еще, в программу, вообще-то, нужно писать комментарии...
Предлагаете гадать на кофейной гуще, что вы там собирались сделать?
0
0 / 0 / 0
Регистрация: 12.06.2009
Сообщений: 3
13.06.2009, 00:19  [ТС] 3
Код
Struct koord kv-структура координат квадрата: (рисунок 2.3)

 Рисунок 2.3- Структура координат квадрата

kv[5][5]-двумерный массив, где 5- максимальное значение
struct point- структура точки
k-угловой коэффициент диагонали квадрата
s-шаг координатной сетки
l-угловой коэффициент прямой
I,j-номер столбца и строки соответственно
float-вещественные числа одинарной точности
int-целые числа

#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <dos.h>
#include <stdio.h>
struct point  // структура точки
{
float x,y;
};
struct koord // структура координат квадрата
{
float xu;
float yu;
float xd;
float yd;
};

void main() //главная функция
{  
clrscr(); //очистка экрана
float y,x, s, k, l;
s=1; //шаг деления координатной сетки
int i,j;
struct koord kv[5][5]; // создание координатной сетки размерностью 5*5
    kv[0][0].yd=0; // присваивание координат первому квадрату
    kv[0][0].yu=kv[0][0].yd+s
    kv[i][0].xd=0;
    kv[0][0].xu=kv[0][0].xd+s  
  for(i=0;i<5;i++)
  { 
    for(j=1;j<5;j++)
   {
       kv[i][j].xd=kv[i][j-1].xu;
          kv[i][j].yd=kv[i-1][j].yu;
 
       kv[i][j].xu=kv[i][j-1].xu+s;
          kv[i][j].yu=kv[i-1][j].yu; 
  printf("KV xd=%.0f, yd=%.0f, xu=%.0f, yu=%.0f\n",kv[i][j].xd, kv[i][j].yd, kv[i][j].xu, kv[i][j].yu);
} 
  }

   struct point A,B; // Ввод координат точек А и В
       printf ("Vvedite koord A(x,y)\n");
    scanf ("%f%f",&A.x,&A.y);
       printf ("Vvedite koord B(x,y)\n");
    scanf ("%f%f",&B.x,&B.y);

  float xmin, xmax, ymin, ymax;


  if(A.x<B.x)
  {
    xmin=A.x;
    xmax=B.x;
  }
    else
    {
    xmin=B.x;
    xmax=A.x;
    }

	if(A.y<B.y)
	 {
	   ymin=A.y;
	   ymax=B.y;
	 }
	 else
	 {
	   ymin=B.y;
	   ymax=A.y;
	 }
for(i=0;i<5;i++)
		{


			for(j=0;j<5;j++)
			   {    if(xmin<kv[i][j].xu&&xmin>kv[i][j].xd&&ymin<kv[i][j].yu&&ymin>kv[i][j].yd) // если точка принадлежит тому или иному квадрату
			    printf("Kvadrat tochki A= %d  %d\n",i+1,j+1);
			     else
				  if(xmax<kv[i][j].xu&&xmax>kv[i][j].xd&&ymax<kv[i][j].yu&&ymax>kv[i][j].yd)
				     printf ("Kvadrat tochki B= %d  %d\n",i+1,j+1);}}

if(B.x!=A.x) // условие- если координаты х точек А и В не равны между собой, то делаем следующие операции
{
	l=(B.y-A.y)/(B.x-A.x); // угловой коэффициент прямой
k=(kv[i][j].yu-kv[i][j].yd)/(kv[i][j].xu-kv[i][j].xd); // угловой коэффициент диагонали координатного квадрата
	for(i=0;i<5;i++)
	{


	   for(j=0;j<5;j++)
	    {
if(k!=l||-k!=l) // если коэффициенты не равны по модулю
			{
		 	 x=(k*kv[i][j].xd-l*A.x+A.y-kv[i][j].yd)/(k-l);
			y=(((x-kv[i][j].xd)*(kv[i][j].yu-kv[i][j].yd))/(kv[i][j].xu-kv[i][j].xd))+kv[i][j].yd;
				if(x<xmax&&x>xmin&&y<ymax&&y>ymin&&x<kv[i][j].xu&&x>kv[i][j].xd&&y<kv[i][j].yu&&y>kv[i][j].yd)
				 {
					printf("Kvadrat %d  %d\n",i+1,j+1);
				 }
				else
				{
					x=(-k*kv[i][j].xu-l*A.x+A.y-kv[i][j].yd)/(-k-l);
					y=(((x-kv[i][j].xu)*(kv[i][j].yu-kv[i][j].yd))/(kv[i][j].xd-kv[i][j].xu))+kv[i][j].yd;
					if(x<xmax&&x>xmin&&y<ymax&&y>ymin&&x<kv[i][j].xu&&x>kv[i][j].xd&&y<kv[i][j].yu&&y>kv[i][j].yd)
					{
						printf("Kvadrat %d  %d\n",i+1,j+1);
					}
				}
			}
			else
			{
					printf("Kvadrat %d  %d\n",i+1,j+1);
			}
		}
	}
}
else 
{
     for(i=0;i<5;i++)
     for(j=0;j<5;j++)               if(kv[i][j].xd<xmax&&kv[i][j].xu>xmin&&kv[i][j].yd<ymax&&kv[i][j].yu>ymin)

		    printf("Kvadrat %d  %d\n",i+1,j+1); // вывод координаты квадрата на экран
}
     getch();

}
Добавлено через 40 минут 47 секунд
При вводе значения точек А и В программа не вычисляет номера квадратов через которые прошла прямая АВ а просто выходит из экрана вывода результата..
0
2341 / 497 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
13.06.2009, 08:39 4
очевидно, что это - не рабочий код.
он не может скомпилироваться.
а если и скомпилируется - вылетит сразу после запуска.
C++
1
2
3
    kv[0][0].yu=kv[0][0].yd+s  //а где ;  ???
    kv[i][0].xd=0;                          //что такое i ??? переменная неинициализирована
    kv[0][0].xu=kv[0][0].xd+s  //тоже нет ;  ???
дальше хлеще
C++
1
2
3
4
5
6
7
8
9
10
11
12
 for(i=0;i<5;i++)
  { 
    for(j=1;j<5;j++)
   {
       kv[i][j].xd=kv[i][j-1].xu;
          kv[i][j].yd=kv[i-1][j].yu;   //при первом проходе здесь i = 0. а куда указывает i-1 ??? =-O
 
       kv[i][j].xu=kv[i][j-1].xu+s;
          kv[i][j].yu=kv[i-1][j].yu; // i =0; i-1 ??
  printf("KV xd=%.0f, yd=%.0f, xu=%.0f, yu=%.0f\n",kv[i][j].xd, kv[i][j].yd, kv[i][j].xu, kv[i][j].yu);
} 
  }
дальше даже не рассматриваю.
система скорее всего вылетит, поскольку обращение идет за границу массива, и перетирает что-то еще.

можно увидеть с чем вы НА САМОМ ДЕЛЕ работаете?
разве сложно скопировать текст из файла cpp в строку сообщения??
0
0 / 0 / 0
Регистрация: 12.06.2009
Сообщений: 3
13.06.2009, 19:12  [ТС] 5
вот более менее отлаженная программа:
Код
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <dos.h>
#include <stdio.h>
struct point
{float x,y;
};
struct koord
{
float xu;
float yu;
float xd;
float yd;
};

void main()
{
 clrscr();
 float y,x, s, k, l;
 s=1;
 int i=0,j=0;
 struct koord kv[5][5];
  kv[0][0].yd=0;
  kv[0][0].xd=0;
  kv[0][0].yu=kv[0][0].yd+s;
  kv[0][0].xu=kv[0][0].xd+s;
    for(j=1;j<5;j++)
     {
      i=0;
      kv[i][j].xd=kv[i][j-1].xu;
      kv[i][j].xu=kv[i][j].xd+s;
      kv[i][j].yd=0;
      kv[i][j].yu=kv[i][j].yd+s;
     }


  for(i=1;i<5;i++)
  {
   
   for(j=1;j<5;j++)
     {
     
      kv[i][j].xd=kv[0][j].xd;
      kv[i][j].xu=kv[0][j].xu;
      kv[i][j].yd=kv[i-1][j].yu;
      kv[i][j].yu=kv[i][j].yd+s;
           
     }
   }


   struct point A,B;
       printf ("Vvedite koord A(x,y)\n");
    scanf ("%f%f",&A.x,&A.y);
       printf ("Vvedite koord B(x,y)\n");
    scanf ("%f%f",&B.x,&B.y);

  float xmin, xmax, ymin, ymax;


  if(A.x<B.x)
  {
    xmin=A.x;
    xmax=B.x;
  }
    else
    {
    xmin=B.x;
    xmax=A.x;
    }

	if(A.y<B.y)
	 {
	   ymin=A.y;
	   ymax=B.y;
	 }
	 else
	 {
	   ymin=B.y;
	   ymax=A.y;
	 }
for(i=0;i<5;i++)
		{


			for(j=0;j<5;j++)
			   {    if(xmin<kv[i][j].xu&&xmin>kv[i][j].xd&&ymin<kv[i][j].yu&&ymin>kv[i][j].yd)
			    printf("Kvadrat tochki A= %d  %d\n",i+1,j+1);
			     else
				  if(xmax<kv[i][j].xu&&xmax>kv[i][j].xd&&ymax<kv[i][j].yu&&ymax>kv[i][j].yd)
				    { printf ("Kvadrat tochki B= %d  %d\n",i+1,j+1);}}}

if(B.x!=A.x)
{
	l=(B.y-A.y)/(B.x-A.x);
	for(i=0;i<5;i++)
	{


		for(j=0;j<5;j++)
		{


			k=(kv[i][j].yu-kv[i][j].yd)/(kv[i][j].xu-kv[i][j].xd);
			if(k!=l||-k!=l)
				{
					x=(k*kv[i][j].xd-l*A.x+A.y-kv[i][j].yd)/(k-l);
					y=(((x-kv[i][j].xd)*(kv[i][j].yu-kv[i][j].yd))/(kv[i][j].xu-kv[i][j].xd))+kv[i][j].yd;
				if(x<xmax&&x>xmin&&y<ymax&&y>ymin&&x<kv[i][j].xu&&x>kv[i][j].xd&&y<kv[i][j].yu&&y>kv[i][j].yd)
				 {
					printf("Kvadrat %d  %d\n",i+1,j+1);
				 }
				else
				{
					x=(-k*kv[i][j].xu-l*A.x+A.y-kv[i][j].yd)/(-k-l);
					y=(((x-kv[i][j].xu)*(kv[i][j].yu-kv[i][j].yd))/(kv[i][j].xd-kv[i][j].xu))+kv[i][j].yd;
					if(x<xmax&&x>xmin&&y<ymax&&y>ymin&&x<kv[i][j].xu&&x>kv[i][j].xd&&y<kv[i][j].yu&&y>kv[i][j].yd)
					{
						printf("Kvadrat %d  %d\n",i+1,j+1);
					}
				}
			}
			else
			{
					printf("Kvadrat %d  %d\n",i+1,j+1);
			}
		}
	}
}
else
{
     for(i=0;i<5;i++)
     for(j=0;j<5;j++)
		    if(kv[i][j].xd<xmax&&kv[i][j].xu>xmin&&kv[i][j].yd<ymax&&kv[i][j].yu>ymin)
		    {
		    printf("Kvadrat %d  %d\n",i+1,j+1);}
}
     getch();

}
теперь надо исключить повторения в выводе квадрата и показать квадраты если прямая движется параллельно диагоналям квадрата.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2009, 19:12

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Определение расстояния от точки до плоскости
Определить расстояние от точки А до заданной плоскости, помогите пожалуйста сделать, мне еще...

Определение скорости и ускорения точки по заданным уравнениям ее движения.
Задание 4. Определение скорости и ускорения точки по заданным уравнениям ее движения. По...

Определение принадлежности точки части плоскости

Определение принадлежности точки к заштрихованной плоскости
Даны действительные числа х, у. Определить принадлежит ли точка с координатами (х;у) заштрихованной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.