IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   ПОМОГИТЕ СДЕЛАТЬ ПРОГРАММУ,PLEASE (https://www.imho.ws/showthread.php?t=72046)

akaripov 27.10.2004 11:32

ПОМОГИТЕ СДЕЛАТЬ ПРОГРАММУ,PLEASE
 
:help: :idontnow:
Задача:
Изобразить движущуюся прямую,которая в каждый момент времени касается окружности,центр которой совпадает с центром экрана.Точка касания пересекается по окружности с постоянной угловой скоростью. Сама окружность невидима.Радиус окружности вводит с клавиатуры пользователь.
На Borland C++

PLP 27.10.2004 12:19

Цитата:

akaripov:
движущуюся прямую
один конец прямой на окружности, а второй где?

Цитата:

akaripov:
Точка касания пересекается
должно быть перемещается?

Технически - зная координаты концов прямой, стираем прямую (либо стираем весь экран, либо закрашиваем прямую цветом фона) и рисуем смещенную и т.д.

Сама математика простая: в цикле по углу angle от 0 до 359 с помощью sin и cos вычисляем координаты точки окружности x = R*cos(angle); y = R*sin(angle) и учитываем смещение центра окружности - прибавляем к полученным координатам.

zyto 27.10.2004 13:35

Цитата:

один конец прямой на окружности, а второй где?
Прямая бесконечна...

/7y3uK 27.10.2004 16:15

тута все можно еще проще сделать через матрицу поворота и смещения. Прямая строится по двум точкам с двумя координатами. Вот тебе статейка на эту тему:
_ttp://algolist.manual.ru/graphics/3dfaq/articles/23.php

HoverHell 12.11.2004 16:07

Цитата:

/7y3uK:
один конец прямой на окружности, а второй где?
Касательная. Перпендикулярна к отрезку, проведённому из центра окружности к точке касания.точка касания перемещается с течением времени.
Одна точка прямой - точка касания. Вторая - это точка, отведённая от точки касания на какое-нибудь расстояние в сторону, равную текущему углу + 90 градусов.

На паскале я бы написал такую программу за 15 минут. А вот на C++ пишу к сожалению редко.

SwiMMeR 15.11.2004 11:18

На С++ программить не умею посему предложу алгоритм ...

1. Узнаем размеры экрана
2. Вычисляем координаты центра окружности (X0,Y0)
4. Рисуем окружность X^2+Y^2=R^2, т.е.
X в цикле от -R до +R с шагом чем меньше, тем лучше рисуем две точки
с Y=+корню(R^2-X^2) и Y=-корню(R^2-X^2)
5. Затем RR(угол) в цикле от 0 до 360 градусов делаем ...

- Получаем точку с X, полученным из уравнения R^2=X^2+2*R^2*(1-cos RR), и Y, полученным из уравнения X^2+Y^2=R^2

- уравнение касательной в этой точке будет иметь вид
Y=(-A/B)X+(B+A^2/B), где А,В - абсцисса и ордината, полученные на предыдущем этапе (координаты точки касания)

- Рисуем касательную :)

P.S. На каждом шаге необходдимо корректировать абциссу и ординату на X0 и Y0 соответственно

Истина где-то рядом ;)

Arush 16.11.2004 22:16

Только не забыть обрезать прямую по краям экрана.
В принципе, если радиус будет больше чем половина диагонали - прямой будет не видно.


Часовой пояс GMT +4, время: 18:34.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.