发不了图片,我描述吧
有个正方形,边长已知,其中心点A坐标已知(X,Y),正方形外有个随机的B点坐标已知(X1,Y1)
求问AB点连线与正方形相交的坐标怎么算?写程序的时候需要这个逻辑,本人数学真的忘差不多了。冰天雪地,跪求强人

解决方案 »

  1.   

    设交点为M(xm,ym),N(xn,yn)条件一,交点M、N在正方形上,符合正方形的函数(根据边长、A点可求出)条件二,M、N在AB确定的直线上,符合AB线性函数(有AB坐标可以求出)列方程组求解
      

  2.   

    正方形确定后可以得到四条边的直线方程 再找出A、B两点在异侧的边 求解该边与直线ab的交点即可
      

  3.   

    假设这个正方形的边与坐标轴是平行的
    正方形边长不妨设为 2a
    因:正方形中心坐标为(x, y)
    故:其四点坐标分别为(x-a,y-a),(x-a,y+a),(x+a,y-a),(x+a,y+a)
    (x,y)与(x1,y1)的连线与正方形交点必在正方形上,即交点的横(纵)坐标可知
    如:交点在正方形的右边上,则有:
    y-a <= (y1-y)/(x1-x)*a + y <= y+a;
    其他类推即可通过4次判断内得出交点坐标
      

  4.   

    class Point {
    private double x;
    private double y; public Point() {
    } /**
     * @param x
     * @param y
     */
    public Point(double x, double y) {
    this.x = x;
    this.y = y;
    } /**
     * @return the x
     */
    public double getX() {
    return x;
    } /**
     * @param x
     *            the x to set
     */
    public void setX(double x) {
    this.x = x;
    } /**
     * @return the y
     */
    public double getY() {
    return y;
    } /**
     * @param y
     *            the y to set
     */
    public void setY(double y) {
    this.y = y;
    } /*
     * (non-Javadoc)
     * 
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
    return "Point [x=" + x + ", y=" + y + "]";
    }}public class Test { public static double getK(Point a, Point b) {
    if (b.getX() == a.getX()) {
    return 0;
    }
    return (b.getY() - a.getY()) / (b.getX() - a.getX());
    } public static Point getPoint(Point a, Point b, Point c, Point d) {
    Point result = new Point();
    double k1, k2;
    k1 = (b.getY() - a.getY()) / (b.getX() - a.getX());
    k2 = (d.getY() - c.getY()) / (d.getX() - c.getX());
    result.setX((k1 * a.getX() / k2 - c.getX()) * k2 / (k1 - k2));
    result.setY(k1 * (result.getX() - a.getX()));
    return result;
    } public static Point[] getPoint(Point a, Point b, double len) {
    Point[] result = new Point[] { new Point(), new Point() };
    double k = getK(b, a);
    double z = a.getY() - k * a.getX();
    if (k >= -1.0 && k <= 1.0) {
    result[0].setY(a.getY() + len / 2);
    result[0].setX((result[0].getY() - z) / k);
    result[1].setY(a.getY() - len / 2);
    result[1].setX((result[1].getY() - z) / k);
    } else {
    result[0].setX(a.getX() + len / 2);
    result[0].setY(result[0].getX() * k + z);
    result[1].setX(a.getX() - len / 2);
    result[1].setY(result[1].getX() * k + z);
    }
    return result;
    } public static void main(String[] args) {
    Point a = new Point(2, 2);
    Point b = new Point(5, 4);
    double len = 2.0;
    Point[] points = getPoint(a, b, len);
    for (Point p : points) {
    System.out.println(p);
    }
    }
    }
      

  5.   

    8楼的思路是对的  但是可以优化
    优化1由AB两点可以得到一条直线(线段) 这条线段有倾斜角度
     如果与X轴的角度 大于等于45度 小于135等于度  则与正方形的上边相交
    以此类推
    这样只需要与正方形的一边判断就可以
    角度问题可以用 正弦函数 来判断
    优化2
    根据优化1能得到正方形一边的函数式  该函数式有个特点 
    X为已知或者y为已知  直接把 已知的x或者y带入 由AB两点组成的函数式即可
    不需要解 2元一次方程组
      

  6.   

    8楼那个没有解方程组
    y-a <= (y1-y)/(x1-x)*a + y <= y+a;
    其实就是计算下 (y1-y)/(x1-x)*a 的绝对值是否是小于等于 a
    类似的计算4次就够了
    你优化一中的算角度也是需要计算并判断4次,这样都差不多
      

  7.   

    补充 优化1  可以不用正弦值  最好是用 
    XY比 
    假设 A(x1,y1) B(x2,y2)则
    double x = (x1-x2)
    double y = (y1-y2)
    double s=x/y
    if((x<0 && y<0 ||x>0 && y<0 ) && abs(x/y)<1)
    {
    //与正方形上边相交
    //以此类推
    }
       
      

  8.   

    假设正方形边长为a,则点A到正方形上距离m能求出来,当然m有最大值和最小值,而所求坐标就是线段AB与以A为圆心,m为半径圆的交点坐标。根据m最小值最大值可以求出交点坐标的范围来