Передайте координаты x и y и цвет плитки конструктору из Tiles
. Конструктор должен иметь 3 входные переменные (x
, y
, color
):
class Tile {
constructor(x, y, color) {
this.x = x;
this.y = y;
this.color = color;
}
Функция id
должна возвращать значение, и объявление должно быть: [1122 ]
id = function(x, y) {
return y * tilesDown + x;
}
Вычислили все переменные для ширины и высоты плиток в setup
, где вы можете использовать функции p5.js , например, round
, далее обратите внимание, что определение tileWidth
отсутствует в вашем коде:
function setup() {
tilesAlong = 16;
tileBase = W/tilesAlong;
tileHeight = ((tileBase**2)-((tileBase/2)**2))**0.5;
tilesDown = (round((H/tileHeight)/2))*2;
yOffset = (H-(tilesDown*tileHeight))/2;
tilesTotal = (tilesAlong-1)*(tilesDown-1);
createCanvas(W, H);
background(bg);
id = function(x, y) {
return y * tilesDown + x;
}
let tempX = 0, tempY = 0, tempColor = ["40, 40, 40"];
while(id(tempX, tempY) < tilesTotal){
tiles.push(new Tile(tempX, tempY, tempColor));
tempX += 1;
if(tilesAlong < tempX){
tempX = 0;
tempY += 1;
}
}
}
Имя списка, который содержит плитки, - tiles
, а не Tile
. Tile
- это имя класса:
function draw() {
for(let i=0; i < tiles.length; ++i) {
tiles[i].display();
}
}
См. Пример, где я применил изменения к вашему исходному коду:
W = 800;
H = 600;
bg = 210;
let tiles = [];
function setup() {
tilesAlong = 16;
tileBase = W/tilesAlong;
tileWidth = tileBase
tileHeight = ((tileWidth**2)-((tileWidth/2)**2))**0.5;
tilesDown = (round((H/tileHeight)/2))*2;
yOffset = (H-(tilesDown*tileHeight))/2;
tilesTotal = (tilesAlong-1)*(tilesDown-1);
createCanvas(W, H);
background(bg);
id = function(x, y) {
return y * tilesDown + x;
}
let tempX = 0, tempY = 0, tempColor = ["40, 40, 40"];
while(id(tempX, tempY) < tilesTotal){
tiles.push(new Tile(tempX, tempY, tempColor));
tempX += 1;
if(tilesAlong < tempX){
tempX = 0;
tempY += 1;
}
}
}
class Tile {
constructor(x, y, color) {
this.x = x;
this.y = y;
this.color = color;
}
display() {
if(this.y/2 == round(this.y/2)){
if(this.x/2 == round(this.x/2)){
triangle(tileWidth * this.x/2, tileHeight*(this.y+1), (tileWidth*this.x/2)+(tileWidth/2), (tileHeight*this.y), (tileWidth*(this.x/2+1)), tileHeight*(this.y+1));
} else{
triangle(tileWidth * this.x/2, tileHeight*(this.y), (tileWidth*this.x/2)+(tileWidth/2), (tileHeight*(this.y+1)), (tileWidth*(this.x/2+1)), tileHeight*(this.y));
}
} else {
if(this.x/2 == round(this.x/2)){
triangle(tileWidth * this.x/2, tileHeight*(this.y), (tileWidth*this.x/2)+(tileWidth/2), (tileHeight*(this.y+1)), (tileWidth*((this.x/2)+1)), tileHeight*(this.y));
} else{
triangle(tileWidth * this.x/2, tileHeight*(this.y+1), (tileWidth*this.x/2)+(tileWidth/2), (tileHeight*this.y), (tileWidth*((this.x/2)+1)), tileHeight*(this.y+1));
}
}
}
}
function draw() {
for(let i=0; i
[115 ] Существуют соображения производительности, связанные с размером объединяющего столбца. Целое число 4 байта шириной - так любое символьное значение, больше, чем 4 байта требуют большего количества диска ввод-вывод, пространство кэша, и т.д. Очевидно, символ (5) не влиял бы на много, но символ (4000) будет чрезвычайно расточителен. Удвойте символьные размеры при использовании типов unicode.
Обычно этот вопрос подходит в контексте естественных по сравнению с суррогатными ключами. В том аргументе размер типа данных не является единственным фактором - поскольку можно часто избегать соединения с естественным (символьным) ключом.
Конечно, никакой, вероятно, не будет узким местом в Вашем приложении - так дизайн безнаказанно (по крайней мере, в этой области).
Нет нет (в Oracle). То, что может иметь значение:
- Если типы данных в Вашем условии объединения отличаются (неявное преобразование может иметь потерю производительности). Так соединение символа к varchar может быть плохим.
- Если одно поле имеет индекс и другой нет.
- Если данные в одном столбце намного длиннее, чем в другом столбце.
Присоединение на символе или символе var будет обычно иметь издержки в противоположность присоединению на интервале. Существует два фактора, о которых я знаю при сравнении символов:
- сопоставление должно быть принято во внимание
- символьные поля имеют больше данных, которые будут сравнены*
* (каждый символ представлен на 8 битов, 10 символьных значений таким образом 80 битов длиной, по сравнению с 32 битами для интервала),
* (это - 16 битов за символ при использовании NCHAR или NVARCHAR),
Символ или varchar будут сохранены как ASCII или unicode в зависимости от Вашего набора символов. Интервал будет сохранен как некоторая упакованная форма. При взятии числа в международной форме, это будет меньше, чем то же число в символе (строка) форма. При хранении, поскольку числовые типы всегда будут более производительными, чем хранение как символы.
Нет, пока типы данных являются тем же между таблицами, к которым Вы присоединяетесь, необходимо быть в порядке