Форум Херсона. Форум Херсонской молодежи, флейм, фотографии Херсона, политика в Херсоне, сетевой форум, сети Херсона


Приветствуем на Форум Херсона. Форум Херсонской молодежи..

На данный момент Вы находитесь на форуме как Гость и имеете очень ограниченные возможности и права. Что бы писать или отвечать в темах, загружать картинки, файлы на форуме Вам нужно зарегистрироваться, что совершенно бесплатно. Регистрация очень быстрая, не откладывайте эту процедуру!

Если возникнут проблемы с регистрацией напишите нам.

Галерея форума Блоги пользователей Список банов
Вернуться   Форум Херсона. Форум Херсонской молодежи. > >
Регистрация СправкаСтатистика Пользователи Календарь Поиск Сообщения за день Все разделы прочитаны

Программирование Все вопросы по написанию программ

Ответ
 
Опции темы
Старый 24.08.2004, 22:51   #1 (Ссылка на пост)
Свой В Доску
 
Активность Longevity
0/20 20/20
Today Сообщения
0/5 ssssss992
Благодарил(а): 0
Благодарили 9 раз в 8 постах
Галерея: 0
Вес репутации: 20 Anonymous идет по правильному пути
Как можно сделать проще?

Мне надо было найти угол между двумя точками на плоскости.
Я долго трахался и наконец написал функцию. Получилась она
слишком большой и непонятной. Может кто-то знает, как можно
проще найти угол между точками?
В функцию передаются координаты точек.
Вот она:

function TForm1.getangle(x1,y1,x2,y2:integer):Integer;
var a,b,angl,min:integer;
esin,gipot:real;
begin
//У нас есть прямоуг. треугольник. Найдём его гипотенузу
//это расстояние между известными точками

gipot:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
//На 0 делить нельзя, перестрахуемся
if gipot=0 then gipot:=1;
//Начинается бредовая проверка в зависимости от
//координатных четвертей

if y2 <=y1 then
begin
//Находим катет
a:=x2-x1;
//Находим синус угла
esin:=a/gipot;
//А теперь сам угол
angl:=round(256/360*(radtodeg(arcsin(esin))));
end
else// Здесь всё примерно так же. Без комментариев
begin
min:=90;
a:=y2-y1;
esin:=a/gipot;
angl:=round(256/360*(radtodeg(arcsin(esin))+min));
if x2<x1 then
begin
min:=180;
b:=x1-x2;
esin:=b/gipot;
angl:=round(256/360*(radtodeg(arcsin(esin))+min));
end;
end;
result:=angl;
end;
Anonymous вне форума  
Ответить с цитированием
Старый 27.08.2004, 22:36   #2 (Ссылка на пост)
Свой В Доску
 
Активность Longevity
0/20 20/20
Today Сообщения
0/5 ssssss992
Благодарил(а): 0
Благодарили 9 раз в 8 постах
Галерея: 0
Вес репутации: 20 Anonymous идет по правильному пути
Кстати, если кому-то интересно, то если одна точка(не помню, какая
именно) находится в 4 четверти(слева и сверху) относительно второй,
то функция возвратит отрицательное значение угла. Например,
если у нас угол=200, она возвратит -55, т.к она возвращает угол от 0
до 255. Кто догадается что надо сделать, чтоб она показывала
правильный угол?
Anonymous вне форума  
Ответить с цитированием
Старый 28.08.2004, 15:11   #3 (Ссылка на пост)
Свой В Доску
 
Активность Longevity
0/20 20/20
Today Сообщения
0/5 ssssss992
Благодарил(а): 0
Благодарили 9 раз в 8 постах
Галерея: 0
Вес репутации: 20 Anonymous идет по правильному пути
может я чегото не доганяю, но угол (!) между двумя точками?? это как? отностительно (0,0)? :roll:
Anonymous вне форума  
Ответить с цитированием
Старый 28.08.2004, 21:42   #4 (Ссылка на пост)
Свой В Доску
 
Активность Longevity
0/20 20/20
Today Сообщения
0/5 ssssss992
Благодарил(а): 0
Благодарили 9 раз в 8 постах
Галерея: 0
Вес репутации: 20 Anonymous идет по правильному пути
Значит так. Пусть у нас есть две точки. Начало координат присобачим
к первой точке. Соединим точки линией. И вот эта прямая и какая-то
из осей(x или y, не помню точно, а думать щас лень) образуют
нужный нам угол. Иногда, чтоб получить првильный результат
приходится к этому углу прибавлять 180 градусов.
Anonymous вне форума  
Ответить с цитированием
Старый 21.03.2006, 22:24   #5 (Ссылка на пост)
Задержался
Пол:
 
Активность Longevity
0/20 19/20
Today Сообщения
0/5 sssssss89
Благодарил(а): 1
Благодарили 5 раз в 4 постах
Галерея: 0
Вес репутации: 19 Mykola идет по правильному пути
тут ты неправ насчет того, что появляется неправильный результат, дело в том что угол измеряется от оси Х допустим против часовой стрелки, так вот, если у тебя вторая точка относительно начала координат, лежит в четвертой четверти, то угол будет больше 270!!!! сответственно, а найти угол - очень просто, есть уравнение пучка прямых y = kx + b, где k - это тангенциальный коээфициент, т.е. tan(a), где а - искомый угол, b - смещение по оси y (т.к. прямая проходит через начало координат, то b = 0), отсюда у нас получается уравнение y = kx или что нам нужно k = y/x
находим k, подставив кординаты второй точки относительно первой, и находим арктангес этой величины - вот и искомый угол , правда в 1 и 3 четвертях, и 2 и 4 четвертях тангенсы совпадают, так что нужно делать проверку в какой четверти находится вторая точка.
т.е. функция будет иметь такой вид (ха только заметил, почему используются целые числа для задания точек????)

function TForm1.Angle(x1,y1,x2,y2: real):real;
var
x,y,k: real;
begin
x := x2 - x1;
y := y2 - y1;
if (x = 0) then
if (y > 0) then
result := 90.0
else
result := 270;
else if (y = 0) then
if (x > 0) then
result := 0
else
result := 180;
else begin
k := arctan(abs(y/x));
if (x > 0) and (y < 0) then
result := 360.0 - k
else if (x < 0) and (y < 0) then
result := 180.0 + k
else if (x < 0) and (y > 0) then
result := 90.0 + k;
end;
end;

Спасибо за внимание
Mykola вне форума  
Ответить с цитированием
Старый 21.03.2006, 22:27   #6 (Ссылка на пост)
Задержался
Пол:
 
Активность Longevity
0/20 19/20
Today Сообщения
0/5 sssssss89
Благодарил(а): 1
Благодарили 5 раз в 4 постах
Галерея: 0
Вес репутации: 19 Mykola идет по правильному пути
Блин - поубирало все пробелы :( шо за ерунда????
ЗЫ. Учите математику пригодится
Mykola вне форума  
Ответить с цитированием
Старый 25.12.2006, 16:42   #7 (Ссылка на пост)
Местные мы
 
Аватар для Aurum
Пол:
 
Активность Longevity
0/20 19/20
Today Сообщения
0/5 ssssss458
Благодарил(а): 32
Благодарили 113 раз в 88 постах
Галерея: 0
Вес репутации: 20 Aurum станет скоро известным
Цитата:
Сообщение от Anonymous
Мне надо было найти угол между двумя точками на плоскости.
Я долго трахался и наконец написал функцию. Получилась она
слишком большой и непонятной. Может кто-то знает, как можно
проще найти угол между точками?
В функцию передаются координаты точек.
Вот она:

function TForm1.getangle(x1,y1,x2,y2:integer):Integer;
var a,b,angl,min:integer;
esin,gipot:real;
begin
//У нас есть прямоуг. треугольник. Найдём его гипотенузу
//это расстояние между известными точками

gipot:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
//На 0 делить нельзя, перестрахуемся
if gipot=0 then gipot:=1;
//Начинается бредовая проверка в зависимости от
//координатных четвертей

if y2 <=y1 then
begin
//Находим катет
a:=x2-x1;
//Находим синус угла
esin:=a/gipot;
//А теперь сам угол
angl:=round(256/360*(radtodeg(arcsin(esin))));
end
else// Здесь всё примерно так же. Без комментариев
begin
min:=90;
a:=y2-y1;
esin:=a/gipot;
angl:=round(256/360*(radtodeg(arcsin(esin))+min));
if x2<x1 then
begin
min:=180;
b:=x1-x2;
esin:=b/gipot;
angl:=round(256/360*(radtodeg(arcsin(esin))+min));
end;
end;
result:=angl;
end;
проще было бы написать функцию каторая возвращает угол одной точки, а потом просто вычесть меньший угол из большего.
Например:
Функция_которая_возвращает_угол( х, у)
{
return(ArcTangens(y/x));
}
Функция_которая_возвращает_угол_между_двумя_точкам и(x1,x2,y1,y2)
{
if(Функция_которая_возвращает_угол( х1, у1)>Функция_которая_возвращает_угол( х2, у2))
{
return(Функция_которая_возвращает_угол( х1, у1)-Функция_которая_возвращает_угол( х2, у2));
}
else return(Функция_которая_возвращает_угол( х2, у1)-Функция_которая_возвращает_угол( х1, у1));
}
З.Ы. Орфографии нет.. Просто смысловое умозаключение
Aurum вне форума  
Ответить с цитированием
Старый 25.12.2006, 16:59   #8 (Ссылка на пост)
забанен
Мой дневник
 
Аватар для pingwinator
Пол:
 
Активность Longevity
0/20 18/20
Today Сообщения
0/5 ssss14712
Адрес: где-то в Херсоне
Благодарил(а): 8,120
Благодарили 17,967 раз в 5,590 постах
Записей в дневнике: 4
Галерея: 16
Вес репутации: 10 pingwinator скоро в модераторы
pingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторы
кому-то делать нечего )
вспомнил пост более полугодичной давности
__________________
pingwinator вне форума  
Ответить с цитированием
Старый 25.12.2006, 17:13   #9 (Ссылка на пост)
Местные мы
 
Аватар для Aurum
Пол:
 
Активность Longevity
0/20 19/20
Today Сообщения
0/5 ssssss458
Благодарил(а): 32
Благодарили 113 раз в 88 постах
Галерея: 0
Вес репутации: 20 Aurum станет скоро известным
Цитата:
Сообщение от PingWin
кому-то делать нечего )
вспомнил пост более полугодичной давности
Тема то не закрыта и делать мне нечего (мона подумать ты чемто таким важным занят )
Aurum вне форума  
Ответить с цитированием
Старый 25.12.2006, 17:23   #10 (Ссылка на пост)
забанен
Мой дневник
 
Аватар для pingwinator
Пол:
 
Активность Longevity
0/20 18/20
Today Сообщения
0/5 ssss14712
Адрес: где-то в Херсоне
Благодарил(а): 8,120
Благодарили 17,967 раз в 5,590 постах
Записей в дневнике: 4
Галерея: 16
Вес репутации: 10 pingwinator скоро в модераторы
pingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторы
Цитата:
Сообщение от Aurum
Тема то не закрыта и делать мне нечего (мона подумать ты чемто таким важным занят )
да, лабы по еасд
на, голову поломай
Изображения
 
__________________
pingwinator вне форума  
Ответить с цитированием
Старый 25.12.2006, 17:57   #11 (Ссылка на пост)
Местные мы
 
Аватар для Aurum
Пол:
 
Активность Longevity
0/20 19/20
Today Сообщения
0/5 ssssss458
Благодарил(а): 32
Благодарили 113 раз в 88 постах
Галерея: 0
Вес репутации: 20 Aurum станет скоро известным
Цитата:
Сообщение от PingWin
да, лабы по еасд
на, голову поломай
Да... у мну тож задачка есть на делфи надо написать прогу каторая будет шифровать и дешифровать файлы в формате TXT всеми пройдеными методами.. Всё бы нечего ток на пары не ходил и о методах я ток догадываюсь .. или мож парочку своих придумать
Aurum вне форума  
Ответить с цитированием
Старый 25.12.2006, 18:00   #12 (Ссылка на пост)
забанен
Мой дневник
 
Аватар для pingwinator
Пол:
 
Активность Longevity
0/20 18/20
Today Сообщения
0/5 ssss14712
Адрес: где-то в Херсоне
Благодарил(а): 8,120
Благодарили 17,967 раз в 5,590 постах
Записей в дневнике: 4
Галерея: 16
Вес репутации: 10 pingwinator скоро в модераторы
pingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторы
Цитата:
Сообщение от Aurum
Да... у мну тож задачка есть на делфи надо написать прогу каторая будет шифровать и дешифровать файлы в формате TXT всеми пройдеными методами.. Всё бы нечего ток на пары не ходил и о методах я ток догадываюсь .. или мож парочку своих придумать
от ответа не ухом
всё равно кое-кому делать нечего )
__________________
pingwinator вне форума  
Ответить с цитированием
Старый 25.12.2006, 18:17   #13 (Ссылка на пост)
Местные мы
 
Аватар для Aurum
Пол:
 
Активность Longevity
0/20 19/20
Today Сообщения
0/5 ssssss458
Благодарил(а): 32
Благодарили 113 раз в 88 постах
Галерея: 0
Вес репутации: 20 Aurum станет скоро известным
Цитата:
Сообщение от PingWin
от ответа не ухом
всё равно кое-кому делать нечего )
Харе топик жечь, давай по теме
Aurum вне форума  
Ответить с цитированием
Старый 25.12.2006, 18:21   #14 (Ссылка на пост)
забанен
Мой дневник
 
Аватар для pingwinator
Пол:
 
Активность Longevity
0/20 18/20
Today Сообщения
0/5 ssss14712
Адрес: где-то в Херсоне
Благодарил(а): 8,120
Благодарили 17,967 раз в 5,590 постах
Записей в дневнике: 4
Галерея: 16
Вес репутации: 10 pingwinator скоро в модераторы
pingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторыpingwinator скоро в модераторы
Цитата:
Сообщение от Aurum
Харе топик жечь, давай по теме
ну задачки я подкинул, если есть желание голову поломать - ломай, мне код можеш не показывать. просто када лабу делал мозги пришлося поднапрячь
но это больше к теме Тема для желающих поучаствовать в конкурсе по программированию!
__________________
pingwinator вне форума  
Ответить с цитированием
Старый 25.12.2006, 18:28   #15 (Ссылка на пост)
Местные мы
 
Аватар для Aurum
Пол:
 
Активность Longevity
0/20 19/20
Today Сообщения
0/5 ssssss458
Благодарил(а): 32
Благодарили 113 раз в 88 постах
Галерея: 0
Вес репутации: 20 Aurum станет скоро известным
Arrow

Цитата:
Сообщение от PingWin
ну задачки я подкинул, если есть желание голову поломать - ломай, мне код можеш не показывать. просто када лабу делал мозги пришлося поднапрячь
но это больше к теме Тема для желающих поучаствовать в конкурсе по программированию!
Запутался я, что тут поделаешь
Aurum вне форума  
Ответить с цитированием
Старый 08.01.2007, 21:40   #16 (Ссылка на пост)
АптИчески непразрачЕн.
 
Аватар для Absent
Пол:
 
Активность Longevity
0/20 18/20
Today Сообщения
0/5 sssss1815
Адрес: Дома
Благодарил(а): 483
Благодарили 1,159 раз в 423 постах
Галерея: 0
Вес репутации: 30 Absent заслуживает, что бы гордиться собойAbsent заслуживает, что бы гордиться собойAbsent заслуживает, что бы гордиться собойAbsent заслуживает, что бы гордиться собойAbsent заслуживает, что бы гордиться собойAbsent заслуживает, что бы гордиться собойAbsent заслуживает, что бы гордиться собой
Взял бы чЁто попроще...
типа пересечения тэтраидра сферой в полярных координатах 8))))
__________________
Меньше, чем где-либо, я претендую здесь на полноту, иначе мне пришлось бы повторить массу превосходных житейских правил, преподанных мудрецами разных времен, начиная с Феогниса и псевдо-Соломона и кончая Ларошфуко.
Я буду излагать лишь то, что мне пришло на ум, показалось заслуживающим сообщения, и что, насколько мне не изменяет память, не было еще сказно, или, если и было, то не совсем так, я только подбираю колосья на необозримом, другими до меня сжатом, поле.
Absent вне форума  
Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей - 0 , гостей - 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.


Время на сервере: 13:31.

Регистрация Справка Пользователи Календарь Поиск Сообщения за день Все разделы прочитаны

vBulletin 3, Copyright © 2000-2024, Jelsoft Enterprises Ltd.
Русский перевод: zCarot, Vovan & Co