Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Повернуть линию на угол, зная координаты 2-х точек 
V
    Опции темы
Moid
Дата 18.3.2008, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 27.3.2006

Репутация: 2
Всего: 3



Цитата

... прибавляешь 0, 90, 180 градусов.


Так и сделал, громоздко вышло. 


Вот такой метод получился:

Код

public float Angle
        {
            get 
            {
                float tgAlh = (_a.Point2.X - _a.Point1.X) / (_a.Point2.Y - _a.Point1.Y);
                double angle = (Math.Atan(tgAlh) * 180) / Math.PI;

                if ((_a.Point2.X - _a.Point1.X) >= 0 && (_a.Point2.Y - _a.Point1.Y) >= 0)
                {
                    angle += 270;
                }

                if ((_a.Point2.X - _a.Point1.X) < 0 && (_a.Point2.Y - _a.Point1.Y) >= 0)
                {
                    angle += 270;
                }

                if ((_a.Point2.X - _a.Point1.X) >= 0 && (_a.Point2.Y - _a.Point1.Y) < 0)
                {
                    angle += 90;
                }

                if ((_a.Point2.X - _a.Point1.X) < 0 && (_a.Point2.Y - _a.Point1.Y) < 0)
                {
                    angle += 90;
                }

                if (angle >= 359.999)
                {
                    angle = 0;
                }

                return (float)angle; 
            }
            set 
            {
                float lastAngle = Angle;
                angle = value;

                if (value > 360)
                {
                    angle = (angle / angle) - 1;
                }  
                double phi = Math.Round((Math.Sqrt((lastAngle - value) * (lastAngle - value))), 3);
                float angleRad = (float)((Math.PI / 180) * phi);

                double x = _a.Point1.X + (_a.Point2.X - _a.Point1.X) * Math.Cos(angleRad) + (_a.Point2.Y - _a.Point1.Y) * Math.Sin(angleRad);
                double y = _a.Point1.Y - (_a.Point2.X - _a.Point1.X) * Math.Sin(angleRad) + (_a.Point2.Y - _a.Point1.Y) * Math.Cos(angleRad);

                _a.Point2 = new PointFloat((float)x, (float)y);
            }
        }


vponomarov,
Спасибо за помощь.


--------------------
"Всё должно быть сделано настолько простым, насколько это возможно, но не проще" (с) А.Эйнштейн
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0751 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.