Консультация № 40341
15.04.2006, 10:27
0.00 руб.
0 7 2
Здравствуйте!
Подскажите как правильно сделать вычисление циклом
От центра окружности с заданным колличеством точек и смещением 1-ой точки,
нужно найти каждую координату точки по осям X и Y
Вывести в мемо.

procedure TForm1.Button1Click(Sender: TObject);
var
t: real; // Колличество точек
g: real; // Градусы для смещения 1-ой точки
m: real; // Минуты
s: real; // Секунды
xx: real; // Координата Х центра окружности
yy: real; // Координата Y центра окружности
c: integer; // челое число
d: integer; // дробное число
r: real; // Радиус
n: real;
v: real; // вычисления
xxa: real; // вычисления
yya: real; // вычисления
begin
// получить исходные данные из полей ввода
xx:= StrToFloat(Edit1.Text); // Координата Х центр окружности
yy:= StrToFloat(Edit2.Text); // Координата Y центр окружности
g:= StrToFloat(Edit3.Text); // Градусы (смещение 1-ой точки)
m:= StrToFloat(Edit4.Text); // Минуты
s:= StrToFloat(Edit5.Text); // Секунды
t:= StrToFloat(Edit6.Text); // Колличество точек
r:= StrToFloat(Edit7.Text); // Радиус
// предварительные преобразования
c:= Trunc(t); // это целая часть числа t
d:= Trunc(t/2) mod 10000; // это дробная часть числа t
// вычисление
v:=360/t+((g+(m/60+(s/3600)))*pi/180);// Угол от колличества точек
for n = 1 to t
then
// begin
xx:= r*cos(v);// Радиус на косинус угла v
//xxa:= xx+1; // Шаг на следующую точку по х
yy:= r*sin(v);// Радиус на синус угла v
//yya:= yy+1; // Шаг на следующую точку по y

// вывод результата
Memo1.Lines.Add(FloatToStrF(xxa,yya,ffFixed,5,4) + ‘‘);// вывод по осям X и Y
end;
//end;

Обсуждение

Неизвестный
15.04.2006, 14:02
общий
Здравствуйте.Будьте добры, разъясните следующие моменты:<ol type=1><li><i>От центра окружности с заданным колличеством точек и смещением 1-ой точки</i> - как это понимать (если не можете составить правильное сложное предложение, лучше нексолькими напишите, на пальцах объясните) ?</li><li><i>найти каждую координату точки</i> - какой точки ?</li><li><i>смещение 1-ой точки</i> - какое смещение?</li><li>каким ещё точкам нужно подсчитать координаты ?</li></ol>Жду ответа.
Неизвестный
15.04.2006, 15:45
общий
это ответ
Здравствуйте, Serhik_z!
Если я правильно понял, нужно рассчитать координаты каждой из точек окружности... В этом случае на помощь приходит геометрическое уравнение окружности:
<b>X<sup>2</sup> + Y<sup>2</sup> = R<sup>2</sup>.</b>
Соответственно, просчёта никаких градусов и не нужно.
Неизвестный
16.04.2006, 16:58
общий
Как расчитать точки по окружности.Зная радиус и колличество точек.И смещение угла от первой точки (в + или -) и далее расчетссылка: http://s24tem.narod.ru/krug.zipКак это все сделать правильно.Спасибо!procedure TForm1.Button1Click(Sender: TObject);var t: real; // Колличество точек g: real; // Градусы для смещения 1-ой точки m: real; // Минуты s: real; // Секунды x: real; // Координата Х центра окружности y: real; // Координата Y центра окружности c: integer; // челое число d: integer; // дробное число r: real; // Радиус n: integer; // Счетчик v: real; // вычисления vu: real; // вычисления xa: real; // вычисления ya: real; // вычисленияbegin // получить исходные данные из полей вводаx:= StrToFloat(Edit1.Text); // Координата Хy:= StrToFloat(Edit2.Text); // Координата Yg:= StrToFloat(Edit3.Text); // Градусы (смещение 1-ой точки)m:= StrToFloat(Edit4.Text); // Минутыs:= StrToFloat(Edit5.Text); // Секундыt:= StrToFloat(Edit6.Text); // Колличество точекr:= StrToFloat(Edit7.Text); // Радиус// предварительные преобразованияc:= Trunc(t); // это целая часть числа td:= Trunc(t/2) mod 10000; // это дробная часть числа t{// вычисление (g+(m/60+(s/3600)))-перевод градусыv:=360/t;// Угол от колличества точек//vu:=v+(g+(m/60+(s/3600)));// угол смещенияxa:= x+r*cos((vu)*pi/180);// расчет Т1 по Хya:= y+r*sin((vu)*pi/180);// расчет Т1 по Y// вывод результатаMemo1.Lines.Add(FloatToStrF(xa,ffFixed,9,8) + ‘‘);// вывод по осям X и YMemo2.Lines.Add(FloatToStrF(ya,ffFixed,9,8) + ‘‘);} for n:=0 to ((360/t)-1) do beginxa:= x+r*cos((n)*pi/180);ya:= y+r*sin((n)*pi/180);// вывод результатаMemo1.Lines.Add(FloatToStrF(xa,ffFixed,9,8) + ‘‘);// вывод по осям X и YMemo2.Lines.Add(FloatToStrF(ya,ffFixed,9,8) + ‘‘);end;end;
Неизвестный
17.04.2006, 00:01
общий
Так. Третий заезд.То, что нужно просчитать координаты нескольких точек, я понял. Эти точки должны быть на окружности заданного радиуса. Это я тоже усвоил.Не понятно только, что за смещение угла от первой точки. Какое ещё смещение ? Смещение чего от чего в чём ? Я, в принципе, смутно догадываюсь, но надо бы убедиться.
Неизвестный
17.04.2006, 16:28
общий
Имеем ось координат Х по горизонтали и Y по вертикали. Первая точка верх по оси Y. Мы захотели эту точку сдвинуть в сторону Х на 10 градусов в лево или (минус -). Далее 360 градусов делим на 8 точек получаем 45 градусов, а так как расчет идет по часовой стрелки то первая точка будет повернута вправо на 35 градусов, (+10 назад в минус общее 45) а все последующие 7 на 45 градусов. В этом и заключается смещение.Можно сделать смещение по Х как вправо так и влево на заданный угол, а далее расчет 360/на кол точек.
Неизвестный
17.04.2006, 18:37
общий
это ответ
Здравствуйте, Serhik_z!
Вам нужно находить координаты точки, имеющей определёное смещение относительно оси Y.
Для начала найдём интервал в градусах, на который будет увеличиваться смещение:

deltaD:=360/N;//N - количество точек

Теперь выведем формулу для рассчёта координат:

X=xx+R*cos(g+deltaD*t);
Y=yy+R*sin(g+deltaD*t);

Если мы используем все углы в градусах, то для делфи это будет выглядеть так (в делфи параметрами функций sin и cos являются углы в <u>радианах</u>, а не в градусах):

xxa:=xx+R*cos(pi*(g+deltaD*t)/180);
yya:=yy+R*sin(pi*(g+deltaD*t)/180);

Цикл берём от 1 до N:

for t:=0 to N-1 do
begin
xxa:=xx+R*cos(pi*(g+deltaD*t)/180);
yya:=yy+R*sin(pi*(g+deltaD*t)/180);
memo1.Lines.Add(FloatToStrF(xxa)+‘ : ‘+Floattostr(yya));
end;

Только <b>t</b> объявляйте как целочисленную, ибо это количество точек, что не может быть дробным числом. Если же имеется в виду количесиво целых отрезков, на которые надо поделить окружность, то возможен вариант и с t:real. Тогда нужно разбить t на целую часть и на дробную часть (как Вы и сделали), цикл пустить по целому значению, а после цикла подсчитать ещё одно значение для исходного t (т.е. дробного), либо для нулевого смещения (результат будет таким же).
Неизвестный
17.04.2006, 18:37
общий
Понял. Вот как Ваш вопрос лучше было бы сформулировать:Рассчитать координаты заданного количества равномерно распределённых по окружности точек. Радиус окружности известен. Координаты центра окружности и её радиус известны. Первая точка имеет смещение относительно оси Y в градусах.
Форма ответа