Отрисовка линии
От: soton  
Дата: 09.12.08 09:04
Оценка:
Линия рисуется по следующему "закону":
for x := 1 to 10
y := tan(alpha)*x + b
Дойдя до конечного значения x, мы получаем некое значение y.
Затем происходит смена угла alpha на другое значение и вторая прямая рисуется по этому же "закону" y := tan(alpha2)*x + b
Интересует вопрос, как можно реализовать алгоритм, чтобы отрисовка второй линии начиналась с точки окончания первой, но уже шла под другим углом?
Получается так, что новая линия рисуется под нужным углом, но происходит смещение координат x и y.
Заранее благодарен!
Re: Отрисовка линии
От: garant  
Дата: 09.12.08 09:54
Оценка:
soton пишет:

> Интересует вопрос, как можно реализовать алгоритм, чтобы отрисовка

> второй линии начиналась с точки окончания первой, но уже шла под другим
> углом?

Подобрать при старте второй линии и таким образом, чтобы y был равен в
этой точке, как для первой, так и для второй линии?
Posted via RSDN NNTP Server 2.1 beta
Re: Отрисовка линии
От: Dimonka Верблюд  
Дата: 09.12.08 10:25
Оценка:
Здравствуйте, soton, Вы писали:

S>Линия рисуется по следующему "закону":

S>for x := 1 to 10
S>y := tan(alpha)*x + b
S>Дойдя до конечного значения x, мы получаем некое значение y.
S>Затем происходит смена угла alpha на другое значение и вторая прямая рисуется по этому же "закону" y := tan(alpha2)*x + b
S>Интересует вопрос, как можно реализовать алгоритм, чтобы отрисовка второй линии начиналась с точки окончания первой, но уже шла под другим углом?
S>Получается так, что новая линия рисуется под нужным углом, но происходит смещение координат x и y.

Похоже у тебя неправильная постановка задачи.
Если у тебя известен угол alpha, b и длина линии по X, то и рисовать надо по другому.
Что-то вроде:
Canvas.MoveTo(X0, Y0);
DX := sign(cos(alpha)) * X; // Умножает X на направление движения
DY := tan(alpha)*x + b; // вычисляем смещение по y
Canvas.LineTo(X0 + DX, Y0 + DY);

Но скорее всего ты уперся в формулу, а задача стоит какая-то совсем другая
Re[2]: Отрисовка линии
От: soton  
Дата: 09.12.08 22:05
Оценка:
G>Подобрать при старте второй линии и таким образом, чтобы y был равен в
G>этой точке, как для первой, так и для второй линии?

Да, именно так. Чтобы Y первой линии (при х = 10) был равен Y второй линии (при x = 10), но уже при другом угле.
Re[2]: Отрисовка линии
От: soton  
Дата: 09.12.08 22:08
Оценка:
D>Похоже у тебя неправильная постановка задачи.
D>Если у тебя известен угол alpha, b и длина линии по X, то и рисовать надо по другому.
D>Что-то вроде:
D>
D>Canvas.MoveTo(X0, Y0);
D>DX := sign(cos(alpha)) * X; // Умножает X на направление движения
D>DY := tan(alpha)*x + b; // вычисляем смещение по y
D>Canvas.LineTo(X0 + DX, Y0 + DY);
D>

D>Но скорее всего ты уперся в формулу, а задача стоит какая-то совсем другая

Главное, чтобы происходила прорисовка линий. По другой формуле уже врядли получится, так как под нее "заточен" основной код...
Re[3]: Отрисовка линии
От: Dimonka Верблюд  
Дата: 10.12.08 10:58
Оценка:
Здравствуйте, soton, Вы писали:

S>Главное, чтобы происходила прорисовка линий. По другой формуле уже врядли получится, так как под нее "заточен" основной код...


А в чём проблема-то? Считай в относительных координатах к последней точке.
Re[3]: Отрисовка линии
От: garant  
Дата: 10.12.08 11:14
Оценка:
soton пишет:

> Да, именно так. Чтобы Y первой линии (при х = 10) был равен Y второй

> линии (при x = 10), но уже при другом угле.

Ну так я и ответил — подобрать b во второй формуле.
Posted via RSDN NNTP Server 2.1 beta
Re[4]: Отрисовка линии
От: soton  
Дата: 10.12.08 21:08
Оценка:
Здравствуйте, Dimonka, Вы писали:


D>А в чём проблема-то? Считай в относительных координатах к последней точке.


Не могли бы предложить алгоритм?
Re[5]: Отрисовка линии
От: Dimonka Верблюд  
Дата: 11.12.08 09:31
Оценка:
Здравствуйте, soton, Вы писали:

D>>А в чём проблема-то? Считай в относительных координатах к последней точке.


S>Не могли бы предложить алгоритм?


Я уже предложил алгоритм. Покажи или расскажи где и как используется формула, иначе бессмысленно что-то предлагать.
Подозреваю, что пока ты зацикливаешься на формуле, самое главное мы тут все не понимаем и упускаем. А телепаты уже сюда почти не заходят ))
Re[6]: Отрисовка линии
От: soton  
Дата: 11.12.08 13:47
Оценка:
Здравствуйте, Dimonka, Вы писали:

D>Я уже предложил алгоритм. Покажи или расскажи где и как используется формула, иначе бессмысленно что-то предлагать.

D>Подозреваю, что пока ты зацикливаешься на формуле, самое главное мы тут все не понимаем и упускаем. А телепаты уже сюда почти не заходят ))

По этой формуле строится луч. В программе необходимо проследить движение луча в некоторой геометрии (прямоугольник). При попадании его в прямоугольник, происходит преломление (по оптическому закону), т.е. смена угла распространения. При попадании в стенки (верхнюю, нижнюю и боковую (правую)) происходит его отражение (с этим проблем нет). Соответственно луч гуляет по прямоугольнику и вылетает из него. Это все реализовано. Теперь главная проблема, реализовать преломление.
Также считается пройденный путь луча. Путь луча нужен для расчета интенсивности излучения.
Re[7]: Отрисовка линии
От: Dimonka Верблюд  
Дата: 12.12.08 14:54
Оценка:
Здравствуйте, soton, Вы писали:

S>По этой формуле строится луч. В программе необходимо проследить движение луча в некоторой геометрии (прямоугольник). При попадании его в прямоугольник, происходит преломление (по оптическому закону), т.е. смена угла распространения. При попадании в стенки (верхнюю, нижнюю и боковую (правую)) происходит его отражение (с этим проблем нет). Соответственно луч гуляет по прямоугольнику и вылетает из него. Это все реализовано. Теперь главная проблема, реализовать преломление.

S>Также считается пройденный путь луча. Путь луча нужен для расчета интенсивности излучения.

Мая плакать.. Лучь уже практически везде гуляет, а вопрос стоит о линии "по закону" y := tan(alpha2)*x + b. Какие проблемы с преломлением-то?

Показывай код.
Или лучше не показывай код. Лишний только стресс у всех будет.
Re: Отрисовка линии
От: _petrovich_  
Дата: 19.12.08 13:01
Оценка:
Здравствуйте, soton, Вы писали:

S>Линия рисуется по следующему "закону":

S>for x := 1 to 10
S>y := tan(alpha)*x + b
S>Дойдя до конечного значения x, мы получаем некое значение y.
S>Затем происходит смена угла alpha на другое значение и вторая прямая рисуется по этому же "закону" y := tan(alpha2)*x + b
S>Интересует вопрос, как можно реализовать алгоритм, чтобы отрисовка второй линии начиналась с точки окончания первой, но уже шла под другим углом?
S>Получается так, что новая линия рисуется под нужным углом, но происходит смещение координат x и y.
S>Заранее благодарен!

Строишь Yn = f(Xn), для n = 1..10
Дальше вся хитрость прорисовки состоит в простом смещении центра координат в точку (X10, Y10) из точки (0, 0), т.е.
Ym = Y10 + f2(Xm — X10)
или в твоих терминах:
y = (tan(alpha)*10 + b) + tan(aplha2)*(x — 10) + b.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.