переопределение bool () для пользовательского класса [дубликат]

50
задан geckon 24 May 2016 в 00:25
поделиться

3 ответа

Это реализация, сделанная для СЕГМЕНТОВ КОНЕЧНЫХ ЛИНИЙ, не бесконечных прямых, как большинство других функций здесь кажется (вот почему я сделал это).

Реализация теории Полом Бурком .

Python:

def dist(x1, y1, x2, y2, x3, y3): # x3,y3 is the point
    px = x2-x1
    py = y2-y1

    norm = px*px + py*py

    u =  ((x3 - x1) * px + (y3 - y1) * py) / float(norm)

    if u > 1:
        u = 1
    elif u < 0:
        u = 0

    x = x1 + u * px
    y = y1 + u * py

    dx = x - x3
    dy = y - y3

    # Note: If the actual distance does not matter,
    # if you only want to compare what this function
    # returns to other results of this function, you
    # can just return the squared distance instead
    # (i.e. remove the sqrt) to gain a little performance

    dist = (dx*dx + dy*dy)**.5

    return dist

AS3:

public static function segmentDistToPoint(segA:Point, segB:Point, p:Point):Number
{
    var p2:Point = new Point(segB.x - segA.x, segB.y - segA.y);
    var something:Number = p2.x*p2.x + p2.y*p2.y;
    var u:Number = ((p.x - segA.x) * p2.x + (p.y - segA.y) * p2.y) / something;

    if (u > 1)
        u = 1;
    else if (u < 0)
        u = 0;

    var x:Number = segA.x + u * p2.x;
    var y:Number = segA.y + u * p2.y;

    var dx:Number = x - p.x;
    var dy:Number = y - p.y;

    var dist:Number = Math.sqrt(dx*dx + dy*dy);

    return dist;
}

Java

private double shortestDistance(float x1,float y1,float x2,float y2,float x3,float y3)
    {
        float px=x2-x1;
        float py=y2-y1;
        float temp=(px*px)+(py*py);
        float u=((x3 - x1) * px + (y3 - y1) * py) / (temp);
        if(u>1){
            u=1;
        }
        else if(u<0){
            u=0;
        }
        float x = x1 + u * px;
        float y = y1 + u * py;

        float dx = x - x3;
        float dy = y - y3;
        double dist = Math.sqrt(dx*dx + dy*dy);
        return dist;

    }
-121--534362-

Попробуйте,

 var Test =  function() { 
    this.init = function() { 
     alert("hello"); 
    }  
    this.run = function() { 
     // call init here 
     this.init(); 
    } 
} 

//creating a new instance of Test
var jj= new Test();
jj.run(); //will give an alert in your screen

Спасибо.

-121--3147231-

Это Python 2.x или Python 3.x? Вместо Python 2 .x необходимо переопределить __ ненулевое __ .

class test:
    def __nonzero__(self):
        return False
67
ответ дан 7 November 2019 в 10:34
поделиться
4
ответ дан 7 November 2019 в 10:34
поделиться

Если вы хотите сохранить совместимость вашего кода с python3, вы можете сделать что-то вроде этого

class test:
    def __bool__(self):
        return False
    __nonzero__=__bool__
59
ответ дан 7 November 2019 в 10:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: