ЙажаСценарий / Говнокод #9390 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
if (
		(((a[0][0] < a[1][0] && (x >= a[0][0] && x <= a[1][0])) ||
		(a[0][0] > a[1][0] && (x <= a[0][0] && x >= a[1][0]))) &&
		((b[0][0] < b[1][0] && (x >= b[0][0] && x <= b[1][0])) ||
		(b[0][0] > b[1][0] && (x <= b[0][0] && x >= b[1][0])))) ||
		(a[0][0] == a[1][0] && ((a[0][1] < a[1][1] && (y >= a[0][1] && y <= a[1][1])) ||
								(a[0][1] > a[1][1] && (y <= a[0][1] && y >= a[1][1])))
		) || (
		b[0][0] == b[1][0] && ((b[0][1] < b[1][1] && (y >= b[0][1] && y <= b[1][1])) ||
								(b[0][1] > b[1][1] && (y <= b[0][1] && y >= b[1][1])))
		)) {
			return [x, y];
	} else {
		return false;
	}

Запостил: akim akim, (Updated )

Комментарии (17) RSS

  • условный оператор проверяет принадлежит ли точка x, y отрезку a и b
    Ответить
  • Я не верю, что человек способен написать такой код
    Ответить
        • Да наверное нашел в справочнике формулу и подставил значения - как получилось, так получилось. Вряд ли сам догадался, если бы сам, то наверняка код по-другому выглядел.
          Ответить
  • а вот так выглядит полностью функция нахождения точки пересечения двух отрезков
    function linecross (v1, r1, v2, r2, v3, r3, v4, r4) {
    	var a = [[v1, r1], [v2, r2]];
    	var b = [[v3, r3], [v4, r4]];
    	var x, y, k1, k2, a1, a2;
    	if (a[0][0] > a[1][0]) {
    		x = a[1][0];
    		y = a[1][1];
    		a[1][0] = a[0][0];
    		a[1][1] = a[0][1];
    		a[0][0] = x;
    		a[0][1] = y;
    	}
    	if (b[0][0] > b[1][0]) {
    		x = b[1][0];
    		y = b[1][1];
    		b[1][0] = b[0][0];
    		b[1][1] = b[0][1];
    		b[0][0] = x;
    		b[0][1] = y;
    	}
    	if (a[0][0] > b[0][0]) {
    		x = b;
    		b = a;
    		a = x;
    	}
    	if (a[0][0] > b[1][0] || b[1][0] > a[1][0] &&
    		a[0][0] > b[0][0] || b[0][0] > a[1][0]) {
    		return false;
    	}
    	if (a[0][1] == a[1][1]) {
    		k1 = 0;
    	} else {
    		k1 = (a[1][1] - a[0][1]) / (a[1][0] - a[0][0]);
    	}
    	if (b[0][1] == b[1][1]) {
    		k2 = 0;
    	} else {
    		k2 = (b[1][1] - b[0][1]) / (b[1][0] - b[0][0]);
    	}
    	if (k1 == k2) {
    		return false;
    	}
    	if (a[0][0] == a[1][0]) {
    		a2 = b[0][1] - (k2 * b[0][0]);
    		x = a[0][0];
    		y = a2 + (k2 * x);
    	} else if (b[0][0] == b[1][0]) {
    		a1 = a[0][1] - (k1 * a[0][0]);
    		x = b[0][0];
    		y = a1 + (k1 * x);
    	} else {
    		a1 = a[0][1] - (k1 * a[0][0]);
    		a2 = b[0][1] - (k2 * b[0][0]);
    		x = (a1 - a2) / (k2 - k1);
    		y = a2 + (k2 * x);
    	}
    
    	if (
    		(((a[0][0] < a[1][0] && (x >= a[0][0] && x <= a[1][0])) ||
    		(a[0][0] > a[1][0] && (x <= a[0][0] && x >= a[1][0]))) &&
    		((b[0][0] < b[1][0] && (x >= b[0][0] && x <= b[1][0])) ||
    		(b[0][0] > b[1][0] && (x <= b[0][0] && x >= b[1][0])))) ||
    		(a[0][0] == a[1][0] && ((a[0][1] < a[1][1] && (y >= a[0][1] && y <= a[1][1])) ||
    								(a[0][1] > a[1][1] && (y <= a[0][1] && y >= a[1][1])))
    		) || (
    		b[0][0] == b[1][0] && ((b[0][1] < b[1][1] && (y >= b[0][1] && y <= b[1][1])) ||
    								(b[0][1] > b[1][1] && (y <= b[0][1] && y >= b[1][1])))
    		)) {
    			return [x, y];
    	} else {
    		return false;
    	}
    	return false;
    }
    Ответить
    • Пиздец, нахуй разбирать столько случаев, они ж друг от друга не отличаются, если делать не через жопу.
      Если знать только kx+b и крамера, то да, будет херово.
      Ответить
    • Тут как бы не только геометрия... я думал, что массивы где-то используются как массивы - но зачем он(а) их создал(а) - это ж вообще не понятно. Просто на ровном месте самому себе в два раза работу увеличить... :/
      Ответить
  • единственное что не учитывает эта функция это если прямые отрезков совподают)
    Ответить
  • > a[0][0] < a[1][0] && (x >= a[0][0] && x <= a[1][0])

    Это уже говнокод
    Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8