crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Массив объектов, размерность неизвестна
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
FladeX Дата 9.3.2009, 1:27
 
js.js
/* global var definition block */
/* begin */
var required = new Array("x1", "y1", "x2", "y2"); // перечисляем текстовые поля, которые нужно проверить
var required_show = new Array("x1", "y1", "x2", "y2"); // дублирование предыдущего массива
var delta = new Array(); // задаем массив для хранения данных о треугольниках
var triangle = new Object(); // объявляем объект для хранения данных о треугольнике
//var delta[0] = new Array(8);
var eps = new Number; // объявляем площадь
var trnumber = new Number; // вводим глобальный счетчик треугольников
// заполняем данными
triangle.id = 0; // порядковый номер треугольника, для выбора
triangle.level = 0; // уровень вложенности треугольника
triangle.x1 = 0; // абсцисса первой вершины
triangle.y1 = 0; // ордината первой вершины
triangle.x2 = 0; // абсцисса второй вершины
triangle.y2 = 0; // ордината второй вершины
triangle.x3 = 0; // абсцисса третьей вершины
triangle.y3 = 0; // ордината третьей вершины
var allpoint = new Array(); // задаем массив для хранения данных о вершинах
var objpoint = new Object(); // объявляем объект для хранения данных о вершинах
// заполняем данными
objpoint.id = 0; // порядковый номер вершины, для выбора
objpoint.x1 = 0; // абсцисса вершины
objpoint.y1 = 0; // ордината вершины
/* global var definition block */
/* end */

/* form validate block */
/* begin */
function validate(datainput) {
    // регулярное выражение - шаблон чисел
    //var pattern = new RegExp("[0-9]+"); - ищет цифры, работает
    //var pattern = new RegExp("^[0-9]+?(.|,)?[0-9]*?$");
    var pattern = new RegExp("^-??[0-9]+?(.|,)?[0-9]*?$");

    var datavalue = document.inform.elements[datainput].value;
    // заменяем запятую точкой
    //datavalue.replace("^[0-9]+?,?[0-9]*?$", "$1.$2");
    datavalue.replace("^-??[0-9]+?,?[0-9]*?$", "$1$2.$4");

    // если значение не соответствует шаблону, установить значение атрибута class равным "invalid".
    if (datavalue.search(pattern) == -1) {
        document.inform.elements[datainput].className = "invalid";
        alert('Неверно указано значение точки '+ datainput);
        document.inform.elements[datainput].focus();
        //return false;
    } else {
        document.inform.elements[datainput].className = "valid";
    }
    //else textfield.className = "valid";
    //return true;
}

function sendform() {
    var i,j;
    // проверяем введенные координаты
    for (j=0; j<required.length; j++) {
        for (i=0; i<document.forms[0].length; i++) {
            if (document.forms[0].elements[i].name == required[j] && document.forms[0].elements[i].value == "") {
                alert('Пожалуйста, введите ' + required_show[j]);
                document.forms[0].elements[i].focus();
                document.forms[0].elements[i].className = "invalid";
                return false;
            }
        }
    }
    // отдельно проверяем введенное значение площади разбиения
    if (document.inform.eps.value == "") {
        alert('Пожалуйста, введите значение площади разбиения');
        document.inform.eps.focus();
        document.inform.eps.className = "invalid";
    }
    //} else if (document.inform.eps.value <= 0) {

    //} else if (document.inform.eps.value.search("^-") == -1) {
    //    alert('Значение площади должно быть положительным');
    //    document.inform.eps.focus();
    //    document.inform.eps.className = "invalid";
    //}
    return true;
}
/* form validate block */
/* end */

/* form auto input block */
/* begin */
function autogenerate() {
    var r;
    var i,j;
    // сбрасываем все значения
    document.inform.reset();
    // обходим все поля ввода
    for (i=0; i<4; i++) {
        r = Math.random() * 500;
        //document.inform.elements[i].value = r;
        document.inform.elements[required[i]].value = r;
    }
    // и отдельно задаем площадь разбиения
    document.inform.eps.value = '7';
}
/* form auto input block */
/* end */

/* triangle's exist check block */
/* begin */
//function triangle_exist(x1, y1, x2, y2) {
    /* считаем расстояния между точками */
    //var a = Math.sqrt(Math.abs(Math.pow((x1-x2),2) + Math.pow((y1-y2),2)));
    //var b = Math.sqrt(Math.abs(Math.pow((x2-x3),2) + Math.pow((y2-y3),2)));
    //var c = Math.sqrt(Math.abs(Math.pow((x3-x1),2) + Math.pow((y3-y1),2)));
    /* Можно ли построить треугольник на этих точках? */
    //if ((a + b > c) && (b + c > a) && (c + a > b)) {
    //    return true;
    //} else {
    //    alert('По введенным координатам нельзя построить треугольник. Введите другие значения.');
    //    return false;
    //}
//}
/* triangle's exist check block */
/* end */
function bar_make(x1, y1, x2, y2)
{
    var x3 = new Number;
    var y3 = new Number;
    var x4 = new Number;
    var y4 = new Number;
    x4 = x2;
    y4 = y2;
    x2 = x4;
    y2 = y1;
    x3 = x1;
    y3 = y4;
    var bar_points = new Array(x1, y1, x2, y2, x3, y3, x4, y4);
    //return x1, y1, x2, y2, x3, y3, x4, y4;
    return bar_points;
}

/* epsilon input field hide block */
/* begin */
function hide_feps() {
    document.inform.feps.style.display = 'none';
}
/* epsilon input field hide block */
/* end */

/* triangle build block */
/* begin */
function triangle_build() {
    /* получаем введенные координаты */
    var x1 = document.inform.x1.value;
    var y1 = document.inform.y1.value;
    var x2 = document.inform.x2.value;
    var y2 = document.inform.y2.value;
    // переопределяем значение площади
    eps = document.inform.eps.value;
    // обнуляем счетчик треугольников
    trnumber = 0;
    //alert('x2=' + x2);
    //alert('y3=' + y3);
    // проверяем на треугольник
    //if (!triangle_exist(x1, y1, x2, y2, x3, y3)) {
        //document.getElementById('feps').style.display = 'block';
        //document.inform.feps.style.display = 'block';
        //alert('Можно построить');
        // строим главный треугольник
        //triangle_draw(x1, y1, x2, y2, x3, y3, 'triangle000');
        //return;
    //}
    var bar_points = new Array(8);
    bar_points = bar_make(x1, y1, x2, y2);
    x1 = bar_points[0];
    y1 = bar_points[1];
    x2 = bar_points[2];
    y2 = bar_points[3];
    var x3 = bar_points[4];
    var y3 = bar_points[5];
    var x4 = bar_points[6];
    var y4 = bar_points[7];
    // включаем режим ожидания
    //busy('on');
    // стираем предыдущие данные с массива
    delta = new Array();
    // очищаем список треугольников
    //var objsel = document.getElementById("listoftriangles");
    //objsel.options[0] = new Option("Треугольник "+ 0, "tr"+0);
    // и начинаем создание треугольников
    triangle_make(x1, y1, x2, y2, x3, y3, 0, 0);
    //
    triangle_make(x2, y2, x3, y3, x4, y4, 0, 0);
    //for (var i=0; i<count; i++) {
    //    objsel.options[i] = new Option("Треугольник "+ i, "tr"+i);
    //}
    //alert('count=' + objsel.options.length);
    // делаем раскрывающийся список со всеми треугольниками
    triangleselect(trnumber);
    // очищаем список узлов
    pointselreset();
    // делаем раскрывающийся список со всеми узлами
    pointselect(trnumber);
    // выключаем режим ожидания
    //busy('off');
}

function triangle_make(x1, y1, x2, y2, x3, y3, trid, trlevel) {
    trlevel++;
    // временно
    //var eps = 10;
    // объявляем объект для хранения данных о треугольнике
    triangle = new Object();
    //var triangle = new Object(); // переменная задана как глобальная, не объявляем локальную
    // заполняем данными
    triangle.id = trid; // должна быть переменная-счетчик вместо 1
    triangle.level = trlevel; // должна быть переменная-счетчик вместо 1
    triangle.x1 = x1;
    triangle.y1 = y1;
    triangle.x2 = x2;
    triangle.y2 = y2;
    triangle.x3 = x3;
    triangle.y3 = y3;
    // задаем массив для хранения данных о треугольниках
    // var delta = new Array(); // массив задан как глобальный, не переопределяем локальный массив

    // вносим данные о новом треугольнике
    delta[trnumber] = triangle;
    //alert('trid=' + trnumber + 'trlevel=' + trlevel);
    // теперь обновим id
    
    // строим главный треугольник
    triangle_draw(x1, y1, x2, y2, x3, y3, 'triangle000');
    // еще 3 вершины для следующего уровня
    x1 = x1 * 1;
    y1 = y1 * 1;
    x2 = x2 * 1;
    y2 = y2 * 1;
    x3 = x3 * 1;
    y3 = y3 * 1;
    var x4 = (x1 + x2) / 2;
    var y4 = (y1 + y2) / 2;
    var x5 = (x1 + x3) / 2;
    var y5 = (y1 + y3) / 2;
    var x6 = (x2 + x3) / 2;
    var y6 = (y2 + y3) / 2;
    trnumber = trnumber + 1;
    //alert('x5=' + x5);
    //triangle_draw(x4, y4, x5, y5, x6, y6, 'triangle000');
    // проверяем на площадь
    if (triangle_square(x4, y4, x5, y5, x6, y6) > eps) {
        triangle_make(x1, y1, x4, y4, x5, y5, trnumber, trlevel);
        triangle_make(x2, y2, x4, y4, x6, y6, trnumber, trlevel);
        triangle_make(x3, y3, x5, y5, x6, y6, trnumber, trlevel);
        triangle_make(x4, y4, x5, y5, x6, y6, trnumber, trlevel);
    //} else {
        // делаем раскрывающийся список со всеми треугольниками
        //triangleselect(trnumber);
    }
}

function triangle_square(x1, y1, x2, y2, x3, y3) {
    var a;
    var b;
    var c;
    var p;
    var s;
    // находим длины сторон
    a = Math.sqrt(Math.abs(Math.pow((x1-x2),2) + Math.pow((y1-y2),2)));
    b = Math.sqrt(Math.abs(Math.pow((x2-x3),2) + Math.pow((y2-y3),2)));
    c = Math.sqrt(Math.abs(Math.pow((x3-x1),2) + Math.pow((y3-y1),2)));
    // находим полупериметр
    p = (a + b + c) / 2;
    // находим площадь треугольника
    s = Math.sqrt((p - a) * (p - b) * (p - c));
    // возвращаем площадь
    return s;
}
/* triangle build block */
/* end */

/* triangle draw block */
/* begin */
function triangle_draw(x1, y1, x2, y2, x3, y3, cvid) {
    //alert('Draw!');
    //id = 'triangle000';
    // получаем элемент холста
    var canvas = document.getElementById(cvid);
    // получаем контекст
    var context = canvas.getContext("2d");
    // начинаем рисование
    context.beginPath();
    // задаем цвет линии
    //context.strokeStyle = '#fff';
    //context.strokeStyle = getElementById(hrcolor).style.color;

    var lineclr = document.getElementById('selectcolor').value;
    switch(lineclr) {
        case 'black':
            context.strokeStyle = '#000000';
            break;
        case 'white':
            context.strokeStyle = '#ffffff';
            break;
        case 'red':
            context.strokeStyle = '#ff0000';
            break;
        case 'blue':
            context.strokeStyle = '#0000ff';
            break;
        case 'green':
            context.strokeStyle = '#00ff00';
            break;
        case 'yellow':
            context.strokeStyle = '#ffff00';
            break;
        case 'orange':
            context.strokeStyle = '#ffa500';
            break;
        default:
            context.strokeStyle = '#000000';
            break;
    }
    // устанавливаем первую точку
    context.moveTo(x1, y1);
    // проводим первую сторону
    context.lineTo(x2, y2);
    // проводим вторую сторону
    context.lineTo(x3, y3);
    // проводим третью сторону
    context.lineTo(x1, y1);
    // обрисовываем все
    context.stroke();
    // заканчиваем рисование
    context.closePath();
}
/* triangle draw block */
/* end */

/* canvas clear block */
/* begin */
function screen_clear() {
    // получаем элемент холста
    var canvas = document.getElementById('triangle000');
    // получаем контекст
    var context = canvas.getContext("2d");
    // стираем все
    context.clearRect(0, 0, 500, 500);
    // задаем масштаб по умолчанию
    canvasreset();
}
/* canvas clear block */
/* end */

/* accordeon block */
/* begin */
function li_toggle(li) {
    switch(li) {
        case 'li1':
            document.getElementById('author').style.display = "block";
            document.getElementById('author').className = "ulactive";
            document.getElementById('tech').style.display = "none";
            document.getElementById('tech').className = "ulhidden";
            document.getElementById('soft').style.display = "none";
            document.getElementById('soft').className = "ulhidden";
            break;
        case 'li2':
            document.getElementById('author').style.display = "none";
            document.getElementById('author').className = "ulhidden";
            document.getElementById('tech').style.display = "block";
            document.getElementById('tech').className = "ulactive";
            document.getElementById('soft').style.display = "none";
            document.getElementById('soft').className = "ulhidden";
            break;
        case 'li3':
            document.getElementById('author').style.display = "none";
            document.getElementById('author').className = "ulhidden";
            document.getElementById('tech').style.display = "none";
            document.getElementById('tech').className = "ulhidden";
            document.getElementById('soft').style.display = "block";
            document.getElementById('soft').className = "ulactive";
            break;
        default:
            document.getElementById('author').style.display = "block";
            document.getElementById('author').className = "ulactive";
            document.getElementById('tech').style.display = "none";
            document.getElementById('tech').className = "ulhidden";
            document.getElementById('soft').style.display = "none";
            document.getElementById('soft').className = "ulhidden";
            break;
    }
}
/* accordeon block */
/* end */

/* set line's color block */
/* begin */
function setcolor(color) {
    document.getElementById('hrcolor').style.color = color;
    document.getElementById('hrcolor').style.background = color;
    document.getElementById('selectcolor').style.color = color;
}
/* set line's color block */
/* end */

/* view triangle's attributes block */
/* begin */
function triangleview(trid) {
    // извлекаем id треугольника из полученного значения
    trid = trid.substr(2);
    //alert('trid=' + trid);
    //alert(delta[0].id);
    //alert(delta[1].id);
// temp!
/*    var triangle = new Object();
    // заполняем данными
    triangle.id = 1; // должна быть переменная-счетчик вместо 1
    triangle.level = 1; // должна быть переменная-счетчик вместо 1
    triangle.x1 = 11;
    triangle.y1 = 21;
    triangle.x2 = 21;
    triangle.y2 = 22;
    triangle.x3 = 13;
    triangle.y3 = 23;*/
    // задаем массив для хранения данных о треугольниках
    //var delta = new Array();
    // вносим данные о новом треугольнике
    //delta[0] = triangle;
    //delta[1] = triangle;
    //delta[2] = triangle;
    //delta[3] = triangle;
    //delta[4] = triangle;
// temp!
    // заполняем форму данными о выбранном треугольнике
    document.getElementById('trnomer').value = delta[trid].id;
    document.getElementById('trlevel').value = delta[trid].level;
    document.getElementById('trx1').value = delta[trid].x1;
    document.getElementById('try1').value = delta[trid].y1;
    document.getElementById('trx2').value = delta[trid].x2;
    document.getElementById('try2').value = delta[trid].y2;
    document.getElementById('trx3').value = delta[trid].x3;
    document.getElementById('try3').value = delta[trid].y3;
    // заодно и площадь посчитаем
    document.getElementById('trsq').value = triangle_square(delta[trid].x1, delta[trid].y1, delta[trid].x2, delta[trid].y2, delta[trid].x3, delta[trid].y3);
    //alert('id=' + delta[trid].id);
    //document.getElementById('try3').value = '33';
}
/* view triangle's attributes block */
/* end */

/* canvas resize block */
/* begin */
function canvasplus() {
    var canvas = document.getElementById('triangle000');
    // получаем контекст
    var context = canvas.getContext("2d");
    // стираем все
    context.scale(2, 2);
    alert('work!');
    /*var ww = document.getElementById('triangle000').style.width;
    switch(ww) {
        case '100px':
            document.getElementById('triangle000').style.height = '200';
            document.getElementById('triangle000').style.width = '200';
            break;
        case '200px':
            document.getElementById('triangle000').style.height = '300';
            document.getElementById('triangle000').style.width = '300';
            break;
        case '300px':
            document.getElementById('triangle000').style.height = '400';
            document.getElementById('triangle000').style.width = '400';
            break;
        case '400px':
            document.getElementById('triangle000').style.height = '500';
            document.getElementById('triangle000').style.width = '500';
            break;
        case '500px':
            document.getElementById('triangle000').style.height = '600';
            document.getElementById('triangle000').style.width = '600';
            break;
        case '600px':
            document.getElementById('triangle000').style.height = '700';
            document.getElementById('triangle000').style.width = '700';
            break;
        case '700px':
            document.getElementById('triangle000').style.height = '800';
            document.getElementById('triangle000').style.width = '800';
            break;
        case '800px':
            document.getElementById('triangle000').style.height = '900';
            document.getElementById('triangle000').style.width = '900';
            break;
        case '900px':
            document.getElementById('triangle000').style.height = '1000';
            document.getElementById('triangle000').style.width = '1000';
            break;
        default:
            document.getElementById('triangle000').style.height = '600';
            document.getElementById('triangle000').style.width = '600';
            break;
    }*/
}
function canvasminus() {
    var ww = document.getElementById('triangle000').style.width;
    switch(ww) {
        case '200px':
            document.getElementById('triangle000').style.height = '100';
            document.getElementById('triangle000').style.width = '100';
            break;
        case '300px':
            document.getElementById('triangle000').style.height = '200';
            document.getElementById('triangle000').style.width = '200';
            break;
        case '400px':
            document.getElementById('triangle000').style.height = '300';
            document.getElementById('triangle000').style.width = '300';
            break;
        case '500px':
            document.getElementById('triangle000').style.height = '400';
            document.getElementById('triangle000').style.width = '400';
            break;
        case '600px':
            document.getElementById('triangle000').style.height = '500';
            document.getElementById('triangle000').style.width = '500';
            break;
        case '700px':
            document.getElementById('triangle000').style.height = '600';
            document.getElementById('triangle000').style.width = '600';
            break;
        case '800px':
            document.getElementById('triangle000').style.height = '700';
            document.getElementById('triangle000').style.width = '700';
            break;
        case '900px':
            document.getElementById('triangle000').style.height = '800';
            document.getElementById('triangle000').style.width = '800';
            break;
        case '1000px':
            document.getElementById('triangle000').style.height = '900';
            document.getElementById('triangle000').style.width = '900';
            break;
        default:
            document.getElementById('triangle000').style.height = '400';
            document.getElementById('triangle000').style.width = '400';
            break;
    }
}
function canvasreset() {
    document.getElementById('triangle000').style.height = '';
    document.getElementById('triangle000').style.width = '';
}
/* canvas resize block */
/* end */

/* change select triangles list block */
/* begin */
function triangleselect(count) {
    var objsel = document.getElementById("listoftriangles");
    for (var i=0; i<count; i++) {
        objsel.options[i] = new Option("Треугольник "+ i, "tr"+i);
    }
    //alert('count=' + objsel.options.length);
}

function triangleselreset() {
    document.getElementById("listoftriangles").options.length = 0;
}

function showtriangle() {
    // получаем координаты треугольника
    var x1 = document.getElementById("trx1").value;
    var y1 = document.getElementById("try1").value;
    var x2 = document.getElementById("trx2").value;
    var y2 = document.getElementById("try2").value;
    var x3 = document.getElementById("trx3").value;
    var y3 = document.getElementById("try3").value;
    // вызываем функцию рисования
    //triangle_draw(x1, y1, x2, y2, x3, y3, cvid)


    // получаем элемент холста
    var canvas = document.getElementById("triangle000");
    // получаем контекст
    var context = canvas.getContext("2d");
    // начинаем рисование
    context.beginPath();
    // задаем цвет линии
    context.strokeStyle = '#bb00bb';
    //context.strokeStyle = getElementById(hrcolor).style.color;

    // устанавливаем первую точку
    context.moveTo(x1, y1);
    // проводим первую сторону
    context.lineTo(x2, y2);
    // проводим вторую сторону
    context.lineTo(x3, y3);
    // проводим третью сторону
    context.lineTo(x1, y1);
    // обрисовываем все
    context.stroke();
    // заканчиваем рисование
    context.closePath();
}

function resettriangle() {
    // получаем координаты треугольника
    var x1 = document.getElementById("trx1").value;
    var y1 = document.getElementById("try1").value;
    var x2 = document.getElementById("trx2").value;
    var y2 = document.getElementById("try2").value;
    var x3 = document.getElementById("trx3").value;
    var y3 = document.getElementById("try3").value;
    // получаем элемент холста
    var canvas = document.getElementById("triangle000");
    // получаем контекст
    var context = canvas.getContext("2d");
    // начинаем рисование
    context.beginPath();
    // задаем цвет линии
    var lineclr = document.getElementById('selectcolor').value;
    switch(lineclr) {
        case 'black':
            context.strokeStyle = '#000000';
            break;
        case 'white':
            context.strokeStyle = '#ffffff';
            break;
        case 'red':
            context.strokeStyle = '#ff0000';
            break;
        case 'blue':
            context.strokeStyle = '#0000ff';
            break;
        case 'green':
            context.strokeStyle = '#00ff00';
            break;
        case 'yellow':
            context.strokeStyle = '#ffff00';
            break;
        case 'orange':
            context.strokeStyle = '#ffa500';
            break;
        default:
            context.strokeStyle = '#000000';
            break;
    }
    // устанавливаем первую точку
    context.moveTo(x1, y1);
    // проводим первую сторону
    context.lineTo(x2, y2);
    // проводим вторую сторону
    context.lineTo(x3, y3);
    // проводим третью сторону
    context.lineTo(x1, y1);
    // обрисовываем все
    context.stroke();
    context.stroke();
    context.stroke();
    context.stroke();
    // заканчиваем рисование
    context.closePath();
}
/* change select triangles list block */
/* end */

/* triangle's neighbor list block */
/* start */
function closerclear() {
    // очищаем поле
    document.getElementById('closerarea').value = '';
}

function closerfill() {
    // очищаем поле
    document.getElementById('closerarea').value = '';
    // получаем выбранный элемент из списка треугольников
    var trid = document.getElementById('listoftriangles').value;
    // извлекаем оттуда порядковый номер треугольника
    trid = trid.substr(2);
    //alert('trid=' + trid);
    // обходим весь массив полученных треугольников
    for (var i=0; i<delta.length; i++) {
        // проверяем уровень вложенности
        if (delta[trid].level == delta[i].level) {
            // проверяем на общие вершины
            if (((delta[trid].x1 == delta[i].x1) && (delta[trid].y1 == delta[i].y1)) || ((delta[trid].x2 == delta[i].x2) && (delta[trid].y2 == delta[i].y2)) || ((delta[trid].x3 == delta[i].x3) && (delta[trid].y3 == delta[i].y3))) {
                // добавляем новый элемент в список
                document.getElementById('closerarea').value += delta[i].id;
                document.getElementById('closerarea').value += '\r\n';
            }
        }
    }
}

function closerselect() {
    document.getElementById('closerarea').select();
    document.getElementById('closerarea').focus();
}
/* triangle's neighbor list block */
/* end */

/* change select points list block */
/* begin */
function pointselect(count) {
    var objsel = document.getElementById("listofpoints");
    //alert(count);
    // объявляем массив вершин
    //var allpoint = new Array();
    // объявляем объект-узел
    //var objpoint = Object();
    // задаем свойства объекта
    //objpoint.id = 0;
    //objpoint.x1 = 0;
    //objpoint.y1 = 0;
    // задаем счетчик-индекс массива
    var p = 0;
    //alert('p=' + p);
    // задаем индикатор точки
    var exist = new Boolean();
    //alert('exist='+ !exist);
    var j = 0;
    // обходим массив треугольников
    for (var i=1; i<count; i++) {
        // есть ли эта точка в массиве?
        // презумпция невиновности - по умолчанию нет точки
        exist = false;
        //for (j=i; j>0; j--) {
        for (j=1; j<p; j++) {
            if ((delta[i].x1 == allpoint[j].x1) && (delta[i].y1 == allpoint[j].y1)) {
                // значит уже есть
                exist = true;
            }
        }
        // если точка в массиве еще не присутсвует
        if (exist == false) {
            objpoint = new Object();
            // то записывает ее туда
            allpoint[p] = objpoint;
            allpoint[p].id = p;
            allpoint[p].x1 = delta[i].x1;
            allpoint[p].y1 = delta[i].y1;
            // и прибавляем счетчик
            p++;
        }
        // есть ли эта точка в массиве?
        // презумпция невиновности - по умолчанию нет точки
        exist = false;
        //for (j=i; j>0; j--) {
        for (j=1; j<p; j++) {
            if ((delta[i].x2 == allpoint[j].x1) && (delta[i].y2 == allpoint[j].y1)) {
                // значит уже есть
                exist = true;
            }
        }
        // если точка в массиве еще не присутсвует
        if (exist == false) {
            objpoint = new Object();
            // то записывает ее туда
            allpoint[p] = objpoint;
            allpoint[p].id = p;
            allpoint[p].x1 = delta[i].x2;
            allpoint[p].y1 = delta[i].y2;
            // и прибавляем счетчик
            p++;
        }
        // есть ли эта точка в массиве?
        // презумпция невиновности - по умолчанию нет точки
        exist = false;
        //for (j=i; j>0; j--) {
        for (j=1; j<p; j++) {
            if ((delta[i].x3 == allpoint[j].x1) && (delta[i].y3 == allpoint[j].y1)) {
                // значит уже есть
                exist = true;
            }
        }
        // если точка в массиве еще не присутсвует
        if (exist == false) {
            objpoint = new Object();
            // то записывает ее туда
            allpoint[p] = objpoint;
            allpoint[p].id = p;
            allpoint[p].x1 = delta[i].x3;
            allpoint[p].y1 = delta[i].y3;
            // и прибавляем счетчик
            p++;
        }
    }
    // заполняем список вершин
    for (var k=0; k<allpoint.length; k++) {
        objsel.options[k] = new Option("Узел "+ k, "pt"+k);
    }

    //alert('point=' + allpoint.length);
    //for (var i=0; i<count; i++) {
    //    objsel.options[i] = new Option("Узел "+ i, "tr"+i);
    //}
    //alert('count=' + objsel.options.length);
}

function pointselreset() {
    document.getElementById("listofpoints").options.length = 0;
}
/* change select points list block */
/* end */

/* points's neighbor list block */
/* start */
function ptcloserclear() {
    // очищаем поле
    document.getElementById('ptcloserarea').value = '';
}

function ptcloserfill() {
    // очищаем поле
    document.getElementById('ptcloserarea').value = '';
    // получаем выбранный элемент из списка вершин
    var ptid = document.getElementById('listofpoints').value;
    // извлекаем оттуда порядковый номер вершины
    ptid = ptid.substr(2);
    //alert('trid=' + trid);

    // временный массив с вершинами
    var ptar = new Array();
    // индекс этого массива
    var ptarin = new Number;
    // массив не имеет ни одного элемента
    ptarin = 0;
    // индикатор повторений элементов в массиве
    var ptdbl = new Boolean;

    // обходим все полученные треугольники
    for (var m=0; m<delta.length; m++) {
        // проверяем первую вершину m-го треугольника
        if ((allpoint[ptid].x1 == delta[m].x1) && (allpoint[ptid].y1 == delta[m].y1)) {
            // находим 2 соседние вершины из этого треугольника в списке вершин
            for (var n=0; n<allpoint.length; n++) {
                // проверяем - эта вершина вторая или нет
                if ((allpoint[n].x1 == delta[m].x2) && (allpoint[n].y1 == delta[m].y2)) {
                    // вершина - та, поэтому выводим ее id в список соседних вершин
                    //document.getElementById('ptcloserarea').value += allpoint[n].id;
                    //document.getElementById('ptcloserarea').value += '\r\n';
                    // вершина - та, теперь проверим, есть ли она уже в массиве
                    ptdbl = false;
                    for (var ct=0; ct<ptarin; ct++) {
                        // если она уже есть...
                        if (ptar[ct] == allpoint[n].id) {
                            // то активируем индикатор
                            ptdbl = true;
                        }
                    }
                    // добавляем вершину в массив, если ее там еще нет
                    if (!ptdbl) {
                        ptarin++;
                        ptar[ptarin] = allpoint[n].id;
                    }
                }
                // проверяем - эта вершина третья или нет
                if ((allpoint[n].x1 == delta[m].x3) && (allpoint[n].y1 == delta[m].y3)) {
                    // вершина - та, поэтому выводим ее id в список соседних вершин
                    //document.getElementById('ptcloserarea').value += allpoint[n].id;
                    //document.getElementById('ptcloserarea').value += '\r\n';
                    // вершина - та, теперь проверим, есть ли она уже в массиве
                    ptdbl = false;
                    for (var ct=0; ct<ptarin; ct++) {
                        // если она уже есть...
                        if (ptar[ct] == allpoint[n].id) {
                            // то активируем индикатор
                            ptdbl = true;
                        }
                    }
                    // добавляем вершину в массив, если ее там еще нет
                    if (!ptdbl) {
                        ptarin++;
                        ptar[ptarin] = allpoint[n].id;
                    }
                }
            }
        }
        // проверяем вторую вершину m-го треугольника
        if ((allpoint[ptid].x1 == delta[m].x2) && (allpoint[ptid].y1 == delta[m].y2)) {
            // находим 2 соседние вершины из этого треугольника в списке вершин
            for (var n=0; n<allpoint.length; n++) {
                // проверяем - эта вершина первая или нет
                if ((allpoint[n].x1 == delta[m].x1) && (allpoint[n].y1 == delta[m].y1)) {
                    // вершина - та, поэтому выводим ее id в список соседних вершин
                    //document.getElementById('ptcloserarea').value += allpoint[n].id;
                    //document.getElementById('ptcloserarea').value += '\r\n';
                    // вершина - та, теперь проверим, есть ли она уже в массиве
                    ptdbl = false;
                    for (var ct=0; ct<ptarin; ct++) {
                        // если она уже есть...
                        if (ptar[ct] == allpoint[n].id) {
                            // то активируем индикатор
                            ptdbl = true;
                        }
                    }
                    // добавляем вершину в массив, если ее там еще нет
                    if (!ptdbl) {
                        ptarin++;
                        ptar[ptarin] = allpoint[n].id;
                    }
                }
                // проверяем - эта вершина третья или нет
                if ((allpoint[n].x1 == delta[m].x3) && (allpoint[n].y1 == delta[m].y3)) {
                    // вершина - та, поэтому выводим ее id в список соседних вершин
                    //document.getElementById('ptcloserarea').value += allpoint[n].id;
                    //document.getElementById('ptcloserarea').value += '\r\n';
                    // вершина - та, теперь проверим, есть ли она уже в массиве
                    ptdbl = false;
                    for (var ct=0; ct<ptarin; ct++) {
                        // если она уже есть...
                        if (ptar[ct] == allpoint[n].id) {
                            // то активируем индикатор
                            ptdbl = true;
                        }
                    }
                    // добавляем вершину в массив, если ее там еще нет
                    if (!ptdbl) {
                        ptarin++;
                        ptar[ptarin] = allpoint[n].id;
                    }
                }
            }
        }
        // проверяем третью вершину m-го треугольника
        if ((allpoint[ptid].x1 == delta[m].x3) && (allpoint[ptid].y1 == delta[m].y3)) {
            // находим 2 соседние вершины из этого треугольника в списке вершин
            for (var n=0; n<allpoint.length; n++) {
                // проверяем - эта вершина первая или нет
                if ((allpoint[n].x1 == delta[m].x1) && (allpoint[n].y1 == delta[m].y1)) {
                    // вершина - та, поэтому выводим ее id в список соседних вершин
                    //document.getElementById('ptcloserarea').value += allpoint[n].id;
                    //document.getElementById('ptcloserarea').value += '\r\n';
                    // вершина - та, теперь проверим, есть ли она уже в массиве
                    ptdbl = false;
                    for (var ct=0; ct<ptarin; ct++) {
                        // если она уже есть...
                        if (ptar[ct] == allpoint[n].id) {
                            // то активируем индикатор
                            ptdbl = true;
                        }
                    }
                    // добавляем вершину в массив, если ее там еще нет
                    if (!ptdbl) {
                        ptarin++;
                        ptar[ptarin] = allpoint[n].id;
                    }
                }
                // проверяем - эта вершина вторая или нет
                if ((allpoint[n].x1 == delta[m].x2) && (allpoint[n].y1 == delta[m].y2)) {
                    // вершина - та, поэтому выводим ее id в список соседних вершин
                    //document.getElementById('ptcloserarea').value += allpoint[n].id;
                    //document.getElementById('ptcloserarea').value += '\r\n';
                    // вершина - та, теперь проверим, есть ли она уже в массиве
                    ptdbl = false;
                    for (var ct=0; ct<ptarin; ct++) {
                        // если она уже есть...
                        if (ptar[ct] == allpoint[n].id) {
                            // то активируем индикатор
                            ptdbl = true;
                        }
                    }
                    // добавляем вершину в массив, если ее там еще нет
                    if (!ptdbl) {
                        ptarin++;
                        ptar[ptarin] = allpoint[n].id;
                    }
                }
            }
        }
    }
    // теперь выводим все соседние вершины
    for (var out=1; out<ptarin; out++) {
        document.getElementById('ptcloserarea').value += ptar[out];
        document.getElementById('ptcloserarea').value += '\r\n';
    }


    // обходим весь массив полученных узлов
    //for (var i=0; i<allpoint.length; i++) {
        // проверяем уровень вложенности
    //    if (allpoint[ptid].level == allpoint[i].level) {
            // проверяем на общие вершины
    ///        if (((allpoint[ptid].x1 == allpoint[i].x1) && (allpoint[ptid].y1 == allpoint[i].y1)) || ((allpoint[ptid].x2 == allpoint[i].x2) && (allpoint[ptid].y2 == allpoint[i].y2)) || ((allpoint[ptid].x3 == allpoint[i].x3) && (allpoint[ptid].y3 == allpoint[i].y3))) {
                // добавляем новый элемент в список
    //            document.getElementById('ptcloserarea').value += allpoint[i].id;
    //            document.getElementById('ptcloserarea').value += '\r\n';
    //        }
    //    }
    //}
}

function ptcloserselect() {
    document.getElementById('ptcloserarea').select();
    document.getElementById('ptcloserarea').focus();
}
/* points's neighbor list block */
/* end */

/* view point's attributes block */
/* begin */
function pointview(ptid) {
    // извлекаем id вершины из полученного значения
    ptid = ptid.substr(2);
    // заполняем форму данными о выбранной вершине
    document.getElementById('ptnomer').value = allpoint[ptid].id;
    //document.getElementById('ptlevel').value = delta[ptid].level;
    document.getElementById('ptx1').value = allpoint[ptid].x1;
    document.getElementById('pty1').value = allpoint[ptid].y1;
    //document.getElementById('ptx2').value = delta[ptid].x2;
    //document.getElementById('pty2').value = delta[ptid].y2;
    //document.getElementById('ptx3').value = delta[ptid].x3;
    //document.getElementById('pty3').value = delta[ptid].y3;
    //alert('id=' + delta[trid].id);
    //document.getElementById('try3').value = '33';
}
/* view point's attributes block */
/* end */

/* aproximy functions block */
/* start */
function aproxclear() {
    // очищаем поле
    document.getElementById('aproxarea').value = '';
}
function aproxselect() {
    document.getElementById('aproxarea').select();
    document.getElementById('aproxarea').focus();
}
function aproxfill() {
    //alert('Last level = ' + delta[delta.length-1].level);
    var ct = delta[delta.length-1].level;
    for (var i=0; i<trnumber; i++) {
        if (delta[i].level == ct) {
            document.getElementById('aproxarea').value += 'a0 + a1 * ' + delta[i].x1 + ' + a2 * ' + delta[i].y1;
            document.getElementById('aproxarea').value += '\r\n';
        }
    }
    // define determs
    //var d0, d1, d2, d3 = new Number;
    // for all triangles
    //for (var k=0; k<delta.length; k++) {
    //    d0 = delta[k].x2 * delta[k].x3 * delta[k].x3 +
    //        delta[k].x1 * delta[k].x2 * delta[k].x2 +
    //        delta[k].x1 * delta[k].x1 * delta[k].x3 -
    //        delta[k].x2 * delta[k].x1 * delta[k].x1 -
    //        delta[k].x3 * delta[k].x2 * delta[k].x2 -
    //        delta[k].x1 * delta[k].x3 * delta[k].x3;
    //    d1 = delta
}
/* aproximy functions block */
/* end */

/* compiz-like functions block */
/* begin */
function busy(opti) {
    if (opti == 'on') {
        document.getElementById('d0').style.display = 'block';
    } else {
        document.getElementById('d0').style.display = 'none';
    }
    //for (var k=0; k<80; k++) {
        //document.getElementById('d0').style.opacity = k/100;
        //for (var j=0; j<1000000; j++) {
        //    devnull = 2;
        //}
    //}
}
/* compiz-like functions block */
/* end */
kwisp Дата 8.3.2009, 23:29
  FladeX,
давай пример на JavaScript свой.

есть идея. думаю ночером сегодня закручу код.
FladeX Дата 8.3.2009, 18:20
  Мне-то нормально, я на JavaScript именно так и сделал) Но преподавателю не понравилось.. Нужны именно числа на виджете, и никак иначе.
kwisp Дата 8.3.2009, 12:23
  FladeX,
давай подумаем может
это:
Цитата
1. Правильно выводить цифры (только для конечного уровня рекурсии; для каждой вершины/треугольника;)
2. Выводить список соседних треугольников
3. Выводить список соседних вершин.

сделать не с помощью рисования на области треугольника а с помощью всплывающего окна тултипа или подсказки или виджет информатор сделать. шаришься мышкой по полю а тебе информация в отдельном окне показывается либо вводишь номер треугольника в диалог он тебе выдает информацию по вершинам соседним вершинам и т.д.

рисуя индексы в области треугольника мы имеем много трудностей даже если это конечный уровень рекурсии как ты говоришь. все равно проблемы с размером шрифта и расположением индексов в маленьком треугольнике надо расположить 3 индекса вершины и номер треугольника а на соседние вершины и соседние треугольники места не останется + если много мелких треугольников индексы 2х и 3х значные. в крайнем случае номер мржно рисовать в центре треугольника а все остальное в подсказке.

как тебе?
kwisp Дата 7.3.2009, 17:21
 
Цитата(FladeX @ 7.3.2009, 15:03) *
Все еще актуально.

естественно.
FladeX Дата 7.3.2009, 15:03
  Все еще актуально.
FladeX Дата 6.3.2009, 9:56
 
main.cpp
#include <QApplication>
#include <QMainWindow>
#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QGridLayout>
#include <QHBoxLayout>
#include <QString>
#include <QPainter>
#include <QPaintEvent>
#include <QPen>
#include <QFont>
#include <QTextEdit>
#include <QComboBox>
#include "math.h"

#define MOVE_VAL 50

class Triangle
{
public:
    int id;
    int level;
    double x1;
    double y1;
    double x2;
    double y2;
    double x3;
    double y3;
};

class cDrawField : public QWidget
{
    Q_OBJECT
public:
    cDrawField(QWidget *parent = 0);
    ~cDrawField() {};
    double tx1, ty1, tx2, ty2, ts;
    double scale_val;            // dlya mshtabirovaniya, koefficient
    int x_val, y_val;
    QPainter painter;
    QList<Triangle> triag_lst;
    bool time_bool;
    int counter;
    int rec_level;
    //QComboBox *boxTriangle;
protected:
    void paintEvent(QPaintEvent *);
    void triangleDraw(double tmpx1, double tmpy1, double tmpx2, double tmpy2, double tmpx3, double tmpy3, int tmplevel);
};

cDrawField::cDrawField(QWidget *parent)
    : QWidget(parent)
{
    scale_val = 1;

    x_val = 0;
    y_val = 0;

    tx1 = 0;
    ty1 = 0;
    tx2 = 0;
    ty2 = 0;
    ts = 0;
    
    time_bool = true;
    
    counter = 0;
    rec_level = 0;

    setMinimumSize(500, 500);
}

class MyWidget : public QWidget
{
    Q_OBJECT
public:
    MyWidget(QWidget *parent = 0);
    //QComboBox *boxTriangle;
public slots:
    void setValue();
    void drawRect();
    void scaleMinus();
    void scalePlus();
    void moveLeft() { drawer->x_val -= MOVE_VAL; drawer->repaint(); };
    void moveRight() { drawer->x_val += MOVE_VAL; drawer->repaint(); };
    void moveUp() { drawer->y_val -= MOVE_VAL; drawer->repaint(); };
    void moveDown() { drawer->y_val += MOVE_VAL; drawer->repaint(); };
    void triagSelect(int index);
private:
    QLineEdit *x1edit;
    QLineEdit *y1edit;
    QLineEdit *x2edit;
    QLineEdit *y2edit;
    QLineEdit *sedit;
    QPushButton *automode;
    QPushButton *resetmode;
    QPushButton *gomode;
    QComboBox *boxTriangle;
    QTextEdit *textTriangle;
    QPushButton *minus;
    QPushButton *plus;
    QPushButton *b_left, *b_right,
        *b_up, *b_down;
    cDrawField *drawer;
};

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
{
    QHBoxLayout *layout = new QHBoxLayout;
    QGridLayout *grid = new QGridLayout;
    QLabel *x1label = new QLabel(tr("x1="));
    QLabel *y1label = new QLabel(tr("y1="));
    QLabel *x2label = new QLabel(tr("x2="));
    QLabel *y2label = new QLabel(tr("y2="));
    QLabel *slabel = new QLabel(tr("S="));
    QLabel *nolabel = new QLabel(trUtf8("№="));
    x1edit = new QLineEdit;
    y1edit = new QLineEdit;
    x2edit = new QLineEdit;
    y2edit = new QLineEdit;
    sedit = new QLineEdit;
    automode = new QPushButton(tr("Auto"));
    resetmode = new QPushButton(tr("Reset"));
    gomode = new QPushButton(tr("Go!"));
    minus = new QPushButton(tr("-"));
    plus = new QPushButton(tr("+"));

    b_left = new QPushButton(tr("left"));
    b_right = new QPushButton(tr("right"));
    b_up = new QPushButton(tr("up"));
    b_down = new QPushButton(tr("down"));

    boxTriangle = new QComboBox(this);
    textTriangle = new QTextEdit(this);

    drawer = new cDrawField(this);
    grid->addWidget(x1label, 0, 0);
    grid->addWidget(y1label, 1, 0);
    grid->addWidget(x2label, 2, 0);
    grid->addWidget(y2label, 3, 0);
    grid->addWidget(slabel, 4, 0);
    grid->addWidget(x1edit, 0, 1);
    grid->addWidget(y1edit, 1, 1);
    grid->addWidget(x2edit, 2, 1);
    grid->addWidget(y2edit, 3, 1);
    grid->addWidget(sedit, 4, 1);
    grid->addWidget(automode, 5, 1);
    grid->addWidget(resetmode, 6, 1);
    grid->addWidget(gomode, 7, 1);
    //grid->addWidget(drawer, 0, 2, 8, 3);
    grid->setRowStretch(8,1);
    grid->addWidget(minus, 9, 0);
    grid->addWidget(plus, 9, 1);
    grid->addWidget(b_up, 10, 0);
    grid->addWidget(b_left, 10, 1);
    grid->addWidget(b_down, 11, 0);
    grid->addWidget(b_right, 11, 1);

    grid->addWidget(nolabel, 12, 0);
    grid->addWidget(boxTriangle, 12, 1);
    grid->addWidget(textTriangle, 13, 0, 1, 2);
    //grid->setColumnStretch(2, 1);
    //grid->setRowStretch(1,1);
    layout->addLayout(grid);
    layout->addWidget(drawer, 1);
    //layout->setAlignment(Qt::AlignLeft);
    setLayout(layout);
    connect(resetmode, SIGNAL(clicked()), x1edit, SLOT(clear()));
    connect(resetmode, SIGNAL(clicked()), y1edit, SLOT(clear()));
    connect(resetmode, SIGNAL(clicked()), x2edit, SLOT(clear()));
    connect(resetmode, SIGNAL(clicked()), y2edit, SLOT(clear()));
    connect(resetmode, SIGNAL(clicked()), sedit, SLOT(clear()));
    connect(automode, SIGNAL(clicked()), this, SLOT(setValue()));
    connect(gomode, SIGNAL(clicked()), this, SLOT(drawRect()));
    connect(minus, SIGNAL(clicked()), this, SLOT(scaleMinus()));
    connect(plus, SIGNAL(clicked()), this, SLOT(scalePlus()));
    connect(b_left, SIGNAL(clicked()), this, SLOT(moveLeft()));
    connect(b_right, SIGNAL(clicked()), this, SLOT(moveRight()));
    connect(b_up, SIGNAL(clicked()), this, SLOT(moveUp()));
    connect(b_down, SIGNAL(clicked()), this, SLOT(moveDown()));
    connect(boxTriangle, SIGNAL(activated(int)), this, SLOT(triagSelect(int)));
}

void MyWidget::triagSelect(int index)
{
    if (index)
    {
        //QList<Triangle> &lst = drawer->triag_lst;
        textTriangle->clear();
        textTriangle->append(QString::number(qAbs(index - 12)));
        textTriangle->append(QString::number(qAbs(index - 11)));
        textTriangle->append(QString::number(qAbs(index - 10)));
        textTriangle->append(QString::number(qAbs(index - 6)));
        textTriangle->append(QString::number(qAbs(index - 5)));
        textTriangle->append(QString::number(qAbs(index - 4)));
        textTriangle->append(QString::number(index + 1));
        textTriangle->append(QString::number(index + 2));
        textTriangle->append(QString::number(index + 3));
    }
}

void MyWidget::setValue()
{
    double tx1, ty1, tx2, ty2, ts;
    QString sx1, sy1, sx2, sy2, ss;
    tx1 = rand() % 500;
    ty1 = rand() % 500;
    tx2 = rand() % 500;
    ty2 = rand() % 500;
    ts = rand() % 100;
    sx1 = QString::number(tx1);
    sy1 = QString::number(ty1);
    sx2 = QString::number(tx2);
    sy2 = QString::number(ty2);
    ss = QString::number(ts);
    x1edit->setText(sx1);
    y1edit->setText(sy1);
    x2edit->setText(sx2);
    y2edit->setText(sy2);
    sedit->setText(ss);
};

void MyWidget::drawRect()
{
    QString sx1, sy1, sx2, sy2, ss;
    sx1 = x1edit->text();
    sy1 = y1edit->text();
    sx2 = x2edit->text();
    sy2 = y2edit->text();
    ss = sedit->text();
    drawer->tx1 = sx1.toDouble();
    drawer->ty1 = sy1.toDouble();
    drawer->tx2 = sx2.toDouble();
    drawer->ty2 = sy2.toDouble();
    drawer->ts = ss.toDouble();
    drawer->time_bool = true;
    //drawer->update();

    /*for(int k=0; k<500; ++k)
    {
        boxTriangle->insertItem(k, QString::number(k));
    }*/
    boxTriangle->clear();
    boxTriangle->addItem(QLatin1String("---"), -1);
    QList<Triangle> &lst = drawer->triag_lst;
    foreach (Triangle trg, lst)
    {
        boxTriangle->addItem(QString(tr("Triangle: %1")).arg(trg.id), trg.id);
    }
    drawer->update();
};

void MyWidget::scaleMinus()
{
    drawer->scale_val -= 0.15;
    drawer->repaint();
};

void MyWidget::scalePlus()
{
    drawer->scale_val += 0.15;
    drawer->repaint();
};

void cDrawField::paintEvent(QPaintEvent *e)
{
    double a;
    double b;
    double s;
    int k;
    if(time_bool)
        triag_lst.clear();

    counter = 0;
    painter.begin(this);
    //painter.translate(this->width()/2, this->height()/2);
    //painter.scale(10, 10);
    painter.setPen(QPen(Qt::black, 1, Qt::SolidLine));

    // определяем глубину рекурсии
    k = 0;
    a = qAbs(ty2 - ty1);
    b = qAbs(tx2 - tx1);
    s = (a * b) / 2;
    while (s > ts)
    {
        k++;
        s = ((1 / pow(2, k)) * a * b) / 2;
    }
    rec_level = k;

    int t_tx1, t_ty1, t_tx2, t_ty2;
    t_tx1 = (x_val+tx1)*scale_val+(this->width()/2-(tx1+(tx2-tx1)/2)*scale_val);
    t_ty1 = (y_val+ty1)*scale_val+(this->height()/2-(ty1+(ty2-ty1)/2)*scale_val);
    t_tx2 = (x_val+tx2)*scale_val+(this->width()/2-(tx1+(tx2-tx1)/2)*scale_val);
    t_ty2 = (y_val+ty2)*scale_val+(this->height()/2-(ty1+(ty2-ty1)/2)*scale_val);


    triangleDraw(t_tx1, t_ty1, t_tx2, t_ty2, t_tx1, t_ty2, 0);
    triangleDraw(t_tx1, t_ty1, t_tx2, t_ty2, t_tx2, t_ty1, 0);
    painter.end();
    
    if(time_bool)
        time_bool = false;

    /*for(int k=0; k<triag_lst.size(); ++k)
    {
        *boxTriangle.insertItem(triag_lst[k].id);
    }*/
    e->accept();
}

void cDrawField::triangleDraw(double tmpx1, double tmpy1, double tmpx2, double tmpy2, double tmpx3, double tmpy3, int tmplevel)
{
    double tmpx4, tmpy4, tmpx5, tmpy5, tmpx6, tmpy6;
    double sqt; // площадь
    double a, b, c, p; // стороны и полупериметр
    QString count;
    QString lev;
    painter.setPen(QPen(Qt::black, 1, Qt::SolidLine));
    painter.drawLine(tmpx1, tmpy1, tmpx2, tmpy2);
    painter.drawLine(tmpx2, tmpy2, tmpx3, tmpy3);
    painter.drawLine(tmpx3, tmpy3, tmpx1, tmpy1);
    //counter++;
    tmplevel++;
    if (tmplevel < rec_level)
    //if (tmplevel == (rec_level - 5))
    {
    
        count = QString::number(counter);
        
        if(time_bool)
        {
            Triangle triangle;
            triangle.id = counter;
            triangle.level = tmplevel;
            triangle.x1 = tmpx1;
            triangle.y1 = tmpy1;
            triangle.x2 = tmpx2;
            triangle.y2 = tmpy2;
            triangle.x3 = tmpx3;
            triangle.y3 = tmpy3;
    
            triag_lst.append(triangle);
        }
    
        painter.setFont(QFont("Times", 10, QFont::Normal));
        painter.setPen(QPen(Qt::blue, 1, Qt::SolidLine));
        count = QString::number(counter);
        painter.drawText(tmpx1+10, tmpy1+10, count);
        painter.setPen(QPen(Qt::red, 1, Qt::SolidLine));
        counter++;
        count = QString::number(counter);
        painter.drawText(tmpx1, tmpy1, count);
        counter++;
        count = QString::number(counter);
        painter.drawText(tmpx2, tmpy2, count);
        counter++;
        count = QString::number(counter);
        painter.drawText(tmpx3, tmpy3, count);
    }
    tmpx4 = (tmpx1 + tmpx2) / 2.0;
    tmpy4 = (tmpy1 + tmpy2) / 2.0;
    tmpx5 = (tmpx2 + tmpx3) / 2.0;
    tmpy5 = (tmpy2 + tmpy3) / 2.0;
    tmpx6 = (tmpx1 + tmpx3) / 2.0;
    tmpy6 = (tmpy1 + tmpy3) / 2.0;
    a = sqrt(((tmpx4 - tmpx5) * (tmpx4 - tmpx5)) + ((tmpy4 - tmpy5) * (tmpy4 - tmpy5)));
    b = sqrt(((tmpx5 - tmpx6) * (tmpx5 - tmpx6)) + ((tmpy5 - tmpy6) * (tmpy5 - tmpy6)));
    c = sqrt(((tmpx6 - tmpx4) * (tmpx6 - tmpx4)) + ((tmpy6 - tmpy4) * (tmpy6 - tmpy4)));
    p = (a + b + c) / 2.0;
    sqt = sqrt((p - a) * (p - b) * (p - c))/(scale_val*scale_val);
    if ((sqt > ts) && (ts != 0))
    {
        triangleDraw(tmpx1, tmpy1, tmpx4, tmpy4, tmpx6, tmpy6, tmplevel);
        triangleDraw(tmpx2, tmpy2, tmpx4, tmpy4, tmpx5, tmpy5, tmplevel);
        triangleDraw(tmpx3, tmpy3, tmpx5, tmpy5, tmpx6, tmpy6, tmplevel);
        triangleDraw(tmpx4, tmpy4, tmpx5, tmpy5, tmpx6, tmpy6, tmplevel);
    }
}

#include "main.moc"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MyWidget widget;
    widget.show();
    return app.exec();
}
kwisp Дата 6.3.2009, 9:37
  FladeX,
выложи пожалуйста весь код.позырим что за треугольники.
FladeX Дата 6.3.2009, 0:27
  Задание вот:
Задача стоит такая - вводим 2 координаты и значение площади. Затем строим по координатам прямоугольник и разбиваем его на равные треугольники так, чтобы их площадь была меньше введенного значения. При этом каждую вершину пронумеровать и отобразить это, каждый треугольник пронумеровать и отобразить. И сделать вывод списка соседних треугольников для выбранного треугольника и аналогично для вершин.

Есть реализация этого на javascript, но без вывода цифр...

Сейчас осталось:
1. Правильно выводить цифры (только для конечного уровня рекурсии; для каждой вершины/треугольника;)
2. Выводить список соседних треугольников
3. Выводить список соседних вершин.
kwisp Дата 6.3.2009, 0:10
 
Цитата(kwisp @ 5.3.2009, 14:08) *
на днях будет время.

задание по-подробнее можно?
желательно в первоисточнике. может скриншоты есть?
или твой пост это все что тебе известно.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 1:19