Срочно, помогите с исправлением функции)
от код яваскрипта чтобы нарисовать линию, в пиксельной таблице размером в 50на50
function crt_t(){ var x = 50; var y = 50; var s = '<table width="1" border="0" cellspacing="0">'; var id = ''; for (var j = 1; j <= y; j++) { s += '<tr>'; for (var i = 1; i <= x; i++) { var id = i+';'+j; s += '<td id="' + id + '" bgcolor="#009900" ></td>' } s += '</tr>'; } s += '</table>'; document.getElementById('dd').innerHTML = s; } function line(x1,x2,y1,y2){ xt = x1 + 1; n = Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)) ; k = (y2-y1)/(x2-x1); b = y2-k*x2; for (i=0;i<n;i++){ yt=Math.round(k*xt+b); document.getElementById(xt+';'+yt).bgColor = 'black'; xt = xt + 1; } } n - формула для нахождения отрезка, то есть его длину, и это есть количество точек, которое стоит между точками (х1;у1) и (х2;у2), то есть нам надо сделать далее цикл который и будет ставить эти точки, но нам надо найти теперь координаты этих точек, применяя формулу что y = x*k + b, для прямолинейного отрезка, чтобы иметь эту формулу нам надо узнать k - угловой коэффициент и b - смещение, короче это будет система из уравнений, y1 = k*x1+b и y2 = k*x2+b но так как яваскрипт не решает системы из двух не известных, я ему сократил до k = (y2-y1)/(x2-x1) де у нас x1,x2,y1,y2 >0 и подставивши это в уравнение прямой, b = y2 - k*x1 = y2 - (y2-y1)/(x2-x1)*x1. и в конце оно просто добавляет по +1 к иксу и узнает у и его заливает), но линия может получаться немного не ровная или дето не будет зватать пкселей) или если задать line(49,35,45,25) так оно вообще нарисует точку, ОДНУ!) (49;45) и всё..) кто-мне может помочь с єтой функцией, не много , пожалуйста) |
Скажите, уважаемый, Вы язык, на котором пишете, знаете?
|
ну...
да, как же по-другому, примерно 2 недели учил))) но если серьезно что не так?) |
Судя по тому, что точки вообще ставятся, дело в функции line.
Кажется, у Вас неверные условия для цикла. Особенно смущает переменная n. Лучше перепроверьте - то ли она значит, что надо. |
ну смотри, n - это есть формула для нахождение отрезка между 2 точками, если известно их координаты, и пишется примерно так:
AB*AB = (X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2) ну там все в квадрате, это ясно, и тогда расстояние отрезка и должно быть количеством точек, но при рисовании некоторых линий, линии бывают не соединении правильно. я от и хотел узнать почему же так... может там надо еще какие-то параметры..) |
Вот уже начинается....
Сначала выбирается неверная модель (большая пиксельная таблица для рисования) а потом начинаются попытки что то в ней сделать. Кое где(canvas), достаточно вызвать функцию line. Прикольно будет когда эллипс тебе придется рисовать:) . |
|
Эллипс будет по такой же схеме, находим окружность, то есть количество точек, и с помощью цикла, ставим точке по формуле круга и всё, только мне надо правильно придумать если это будет уже реально эллипс, ну то есть искривлённый круг, от там надо будет подумать над коэффициентами..))
короче, а короче то что кажется зачем? но интересно ведь свою разработку делать!) но как я понял, не кто не поможет с линией, значит будем экспериментировать и исправлять) |
Цитата:
Цитата:
Цитата:
|
Slawaq, колись - лаба, курсак или мышцы размять ? :)
|
Часовой пояс GMT +3, время: 01:45. |