Проверьте, ли векторное произведение b-a
и c-a
0
: это означает, что все точки коллинеарны. Если они, проверьте, ли c
координаты между a
и b
. Используйте или x или координаты y, целых a
и b
являются отдельными на той оси (или они - то же на обоих).
def is_on(a, b, c):
"Return true iff point c intersects the line segment from a to b."
# (or the degenerate case that all 3 points are coincident)
return (collinear(a, b, c)
and (within(a.x, c.x, b.x) if a.x != b.x else
within(a.y, c.y, b.y)))
def collinear(a, b, c):
"Return true iff a, b, and c all lie on the same line."
return (b.x - a.x) * (c.y - a.y) == (c.x - a.x) * (b.y - a.y)
def within(p, q, r):
"Return true iff q is between p and r (inclusive)."
return p <= q <= r or r <= q <= p
Этот ответ раньше был путаницей трех обновлений. Стоящая информация от них: Brian Hayes глава в [1 113] Красивый Код покрытия пространство дизайна для функции теста коллинеарности - полезный фон. ответ Vincent помог улучшить этого. И это был Hayes, кто предложил тестировать только один из x или координат y; первоначально код имел and
вместо [1 110].
Вызов нового метода для строки:
String.prototype.startsWith = function(str){
return (this.indexOf(str) === 0);
}
должен быть таким простым, как:
alert("foobar".startsWith("foo")); //alerts true
Для вашего второго примера, я предполагаю, вам нужен конструктор, который устанавливает переменную-член «i»:
function sample(i) {
this.i = i;
}
sample.prototype.get_data = function() { return this.i; }
Вы можете использовать это следующим образом:
var s = new sample(42);
alert(s.get_data()); //alerts 42
Функции конструктора должны начинаться с заглавной буквы.
function Sample(i) {
this.i = i;
}
var s = new Sample(42);