精华内容
下载资源
问答
  • 两点直线方程找对称点,一般式不支持特殊位置直线(平行于x或者y轴的直线),下面是全部代码: 在这里插入代码片 ```#-*- coding: utf-8 -*- import matplotlib.pyplot as plt import numpy as np from pylab ...

    两点式直线方程找对称点,一般式不支持特殊位置直线(平行于x或者y轴的直线),下面是全部代码:

    在这里插入代码片
    ```#-*- coding: utf-8 -*-
    import matplotlib.pyplot as plt
    import numpy as np
    from pylab import * #让绘图显示中文的库
    import sys
    
    mpl.rcParams['font.sans-serif'] = ['SimHei']  #让绘图显示中文的命令
    
    def caculate1(x1,x3,y3):
        """计算特殊情况下的直线对称点,输入的两点坐标X相同,即关于平行于Y轴的直线的对称点"""
        x4=2*x1-x3
        y4=y3
        plt.scatter([x4],[y4],color='blue',marker='*',label='所求对称点')
        plt.legend()
        plt.show()
    
    def caculate2(x1,x3,y3):
        """计算特殊情况下的直线对称点,输入的两点坐标Y相同,即关于平行于X轴的直线的对称点"""
        x4=x3
        y4=2*y1-y3
        plt.scatter([x4],[y4],color='blue',marker='*',label='所求对称点')
        plt.legend()
        plt.show()
    
    def caculate3(A,B,C,x3,y3):
        """计算一般情况的直线对称点,根据斜率关系推导的数学关系式"""
        x4=x3-2*A*((A*x3+B*y3+C)/(A*A+B*B))
        y4=y3-2*B*((A*x3+B*y3+C)/(A*A+B*B))
        plt.scatter([x4],[y4],color='blue',marker='*',label='所求对称点')
        plt.legend()
        plt.show()
        
    while True:   
        start=eval(input("\n请选择直线方程形式(1 or 2)\n1 一般式\n2 两点式\n\n"))
        
    #一般式还不能画特殊情况直线
    
        if start==3:
                break
                sys.exit()
        
        if start==1:
    
            plt.xticks([0,10,20,30,40,50,60,70,80,90,100])
            plt.yticks([0,10,20,30,40,50,60,70,80,90,100])
            plt.axis('scaled') #注意
    
            A,B,C=eval(input("请输入一般式方程三系数A,B,C(以逗号分隔):"))
            h=np.linspace(0,8,10)
            z=(-A*h-C)/B
            plt.plot(h,z,color='red',linewidth=2)
            
            x3,y3=eval(input("\n请输入已知任意对称点X,Y坐标:"))
            
            #plt.text(x3,y3,str((x3,y3)))
            
            plt.scatter([x3],[y3],color='red',marker='+')
            caculate3(A,B,C,x3,y3)
            
    #两点式支持所有直线
            
        elif start==2:
            plt.xticks([0,10,20,30,40,50,60,70,80,90,100])
            plt.yticks([0,10,20,30,40,50,60,70,80,90,100])
            plt.xlabel("X")
            plt.ylabel("Y")
            plt.title(" 找对称点")
            plt.axis('scaled') #注意
    
            x1,y1=eval(input("\n请输入X1,Y1坐标(以逗号分隔下同):"))
            x2,y2=eval(input("请输入X2,Y2坐标:"))
            
            x3,y3=eval(input("\n请输入已知任意对称点X,Y坐标:"))
    
            if x1==x2:
                plt.plot([x1,x2],[y1,y2],color='red',linewidth=2)
                plt.scatter([x3],[y3],color='red',marker='+',label='已知点')
                plt.legend()
                caculate1(x1,x3,y3)
            elif y1==y2:
                plt.plot([x1,x2],[y1,y2],color='red',linewidth=2)
                plt.scatter([x3],[y3],color='red',marker='+',label='已知点')
                plt.legend()
                caculate2(x1,x3,y3)
            else:
                plt.plot([x1,x2],[y1,y2],color='red',linewidth=2)
                plt.scatter([x3],[y3],color='red',marker='+',label='已知点')
                plt.legend()
                A=y1-y2
                B=x2-x1
                C=x1*y2-y1*x2
                caculate3(A,B,C,x3,y3)
        else:
            print("请选择输入1或者2")
    
    
    展开全文
  • 点关于直线对称点

    千次阅读 2018-05-12 02:36:13
    #include int main() { int n; float a,b,A,B,C,a1,b1;...double dist(POINT p1,POINT p2) // 返回两点之间欧氏距离  {  return( sqrt( (p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y) ) );  }
    #include <stdio.h>
     int main()
    {
        int n;
        float a,b,A,B,C,a1,b1;
        scanf("%d\n",&n);
        while(n--)
        {  scanf("%f %f %f %f %f",&a,&b,&A,&B,&C);
         int a1=int (a-2*A*(A*a+B*b+C)/(A*A+B*B));
         int b1=int (b-2*B*(A*a+B*b+C)/(A*A+B*B));
         printf("%d %d\n",a1,b1);
        }
    }

    Ax+By+C=0

    double dist(POINT p1,POINT p2)                // 返回两点之间欧氏距离 

    return( sqrt( (p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y) ) ); 
    }

    展开全文
  • 模板: const double eps=1e-6; struct point { double x,y; }; struct line//直线ax+by+c=0 { double a,b,c;...line LineFromSegment(point p1,point p2)//直线 { line temp; temp.a=p2

    Problem Description

    The light travels in a straight line and always goes in the minimal path between two points, are the basic laws of optics.

    Now, our problem is that, if a branch of light goes into a large and infinite mirror, of course,it will reflect, and leave away the mirror in another direction. Giving you the position of mirror and the two points the light goes in before and after the reflection, calculate the reflection point of the light on the mirror.
      
    You can assume the mirror is a straight line and the given two points can’t be on the different sizes of the mirror.

    Input

    The first line is the number of test case t(t<=100).
      
    The following every four lines are as follow:
      X1 Y1
      X2 Y2
      Xs Ys
      Xe Ye

      (X1,Y1),(X2,Y2) mean the different points on the mirror, and (Xs,Ys) means the point the light travel in before the reflection, and (Xe,Ye) is the point the light go after the reflection.

      The eight real number all are rounded to three digits after the decimal point, and the absolute values are no larger than 10000.0.

    Output

      Each lines have two real number, rounded to three digits after the decimal point, representing the position of the reflection point.

    Sample Input

    1
    0.000 0.000
    4.000 0.000
    1.000 1.000
    3.000 1.000

    Sample Output

    2.000 0.000 

    Source

    2009 Multi-University Training Contest 5 - Host by NUDT

     

    模板:

    const double eps=1e-6;
    struct point
    {
        double x,y;
    };
    struct line//直线ax+by+c=0
    {
        double a,b,c;
    };
    line LineFromSegment(point p1,point p2)//两个点求直线
    {
        line temp;
        temp.a=p2.y-p1.y;
        temp.b=p1.x-p2.x;
        temp.c=p2.x*p1.y-p1.x*p2.y;
        return temp;
    }
    point LineInter(line l1,line l2)//两条直线求交点
    {
        point temp;
        double a1=l1.a;
        double b1=l1.b;
        double c1=l1.c;
        double a2=l2.a;
        double b2=l2.b;
        double c2=l2.c;
        if(fabs(b1)<eps)
        {
            temp.x=-c1/a1;
            temp.y=(-c2-a2*temp.x)/b2;
        }
        else
        {
            temp.x=(c1*b2-b1*c2)/(b1*a2-b2*a1);
            temp.y=(-c1-a1*temp.x)/b1;
        }
    
        return temp;
    }
    point symmetrical(point p, line L)//求一个点关于一条直线的对称点
    {
        point p2;
        double d;
        d = L.a * L.a + L.b * L.b;
        p2.x = (L.b * L.b * p.x - L.a * L.a * p.x -
                2 * L.a * L.b * p.y - 2 * L.a * L.c) / d;
        p2.y = (L.a * L.a * p.y - L.b * L.b * p.y -
                2 * L.a * L.b * p.x - 2 * L.b * L.c) / d;
        return p2;
    }


    本题代码:

    #include <iostream>
    #include <cmath>
    #include <iomanip>
    using namespace std;
    const double eps=1e-6;
    struct point
    {
        double x,y;
    };
    struct line//直线ax+by+c=0
    {
        double a,b,c;
    };
    line LineFromSegment(point p1,point p2)//两个点求直线
    {
        line temp;
        temp.a=p2.y-p1.y;
        temp.b=p1.x-p2.x;
        temp.c=p2.x*p1.y-p1.x*p2.y;
        return temp;
    }
    point LineInter(line l1,line l2)//两条直线求交点
    {
        point temp;
        double a1=l1.a;
        double b1=l1.b;
        double c1=l1.c;
        double a2=l2.a;
        double b2=l2.b;
        double c2=l2.c;
        if(fabs(b1)<eps)
        {
            temp.x=-c1/a1;
            temp.y=(-c2-a2*temp.x)/b2;
        }
        else
        {
            temp.x=(c1*b2-b1*c2)/(b1*a2-b2*a1);
            temp.y=(-c1-a1*temp.x)/b1;
        }
    
        return temp;
    }
    point symmetrical(point p, line L)//求一个点关于一条直线的对称点
    {
        point p2;
        double d;
        d = L.a * L.a + L.b * L.b;
        p2.x = (L.b * L.b * p.x - L.a * L.a * p.x -
                2 * L.a * L.b * p.y - 2 * L.a * L.c) / d;
        p2.y = (L.a * L.a * p.y - L.b * L.b * p.y -
                2 * L.a * L.b * p.x - 2 * L.b * L.c) / d;
        return p2;
    }
    int main()
    {
        int t;
        cin>>t;
        for(int i=1;i<=t;i++)
        {
            point p[4];
            for(int j=0;j<4;j++)
                cin>>p[j].x>>p[j].y;
            point tmp;
            line l1,l2;
            l1=LineFromSegment(p[0],p[1]);//两点求直线
            tmp=symmetrical(p[3],l1);//直线外一点与一条直线,求该点关于直线的对称点,这里是求的反射点的对称点
            l2=LineFromSegment(tmp,p[2]);//对称点与入射点求直线
            tmp=LineInter(l1,l2);//求反射点(两条直线相交的点)
            cout<<setiosflags(ios::fixed)<<setprecision(3)<<tmp.x<<" "<<tmp.y<<endl;
        }
        return 0;
    }
    


    辅助图(根据所写代码画的)

    展开全文
  • 链接:https://www.nowcoder.com/acm/contest/86/B来源:牛客网时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K,其他语言524288KSpecial... 众所周知,这个问题中有一匹口渴的小马,一条笔直的河,以及小...
    链接:https://www.nowcoder.com/acm/contest/86/B
    来源:牛客网

    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 262144K,其他语言524288K
    Special Judge, 64bit IO Format: %lld

    题目描述

     开始涉猎几何领域了。他现在正在研究小马喝水问题。
    众所周知,这个问题中有一匹口渴的小马,一条笔直的河,以及小马的家。小马需要去河边喝水,然后再去家里。它需要走最短的路径。

    解决这个问题也很简单,其中有一个步骤是要做小马家关于河水的对称点。
    正对此感到一些烦恼。他不会做这个。他想请你帮他作一条过小马家且垂直于河水的线,然后告诉 垂足的位置。

    输入描述:

    第一行一个整数  ,表示  的询问个数。
    接下去  行,每行  个实数 ,表示小马家在点  ,河水为直线 

    输出描述:

    输出共  行,每行两个实数 , 表示答案垂足点的坐标 。 
    
    当你的答案与标准输出的误差小于  时,视为答案正确。
    展开全文
  • P(x0, y0)关于直线Ax+Bx+C=0的对称点M(x1, y1),满足个条件:(1)线段PM的中点在直线上(2)PM与直线垂直/* 点关于直线对称点 */ Point SymmetricalPoint(Point p, Line l) { Point s; double tmp = ...
  • CAD中画一条直线个圆相切

    千次阅读 2019-09-29 22:36:43
    假如,如下需要画一条直线个圆相切 1.首先画个圆 2.点击“直线”功能,开始画直线,此时按住“shift”键的同时按反键,会出现如下选项框,选择“切点”,然后在小圆上选一点,再按住“shift”键的同时按反...
  • 下面通过直线方程的形式,求解点关于直线的距离、垂足、对称点公式。 问题描述1:已知的坐标(x0,y0),直线的方程为Ax+By+C = 0;求直线上的距离d、直线上的垂足(x, y)、点关于直线对称点(x’,...
  • /* 显然,如果A,B在直线的同一侧,则min(PA+PB)=dis(A,B), 否则,求出B关于直线对称点B`,min(PA+PB)=dis(A,B`) */ #include #include #include using namespace std; int main()
  • 解题思路:二话不说,直接暴力模拟,每次看当前剩余量是否小于1e-4或者刚好在边界,否则继续,每次找关于当前要打到的直线对称点,然后对称点和交点作为下次的入射光线就行。 #include ...
  • A(3,1)关于直线x+y-1=0的对最佳答案设对称点坐标是B(x,y),那么AB的中点坐标是 ((3+x)/2,(1+y)/2),它在直线上。 (3+x)/2+(1+y)/2-1=0 (y-1)/(x-3)=1.....(AB的斜率是1) 解得:x=0,y=-2 Flash中的应用: 这里是...
  • 下面通过直线方程的形式,求解点关于直线的距离、垂足、对称点公式。 问题描述1: 已知的坐标(x0,y0),直线的方程为Ax+By+C = 0; 求直线上的距离d、直线上的垂足(x, y)、点关于直线对称点...
  • /*函数功能:求两条直线交点*/ /*输入:条Vec4f类型直线 * Vec4f - (vx, vy, x0, y0) * (vx, vy) 是直线的方向向量,(x0, y0) 是直线上一点*/ /*返回:Point2f类型的*/ Point2f getCrossPoint ( Vec4f ...
  • 问题:分别已知两直线上的两点,求两直线交点,给出解析解。已知直线l1有两点(x1, y1), (x2, y2),直线l2上有两点(x3, y3), (x4, y4),求l1, l2的交点(x0, y0)。(用x1, x2, x3, x4, y1, y2, y3, y4来表示x0, y0)
  • 题意:给你镜子的位置(用两点确定的一条直线表示),光源,光的反射点,求光在镜子的折射点 计算几何的模板,注意斜率!!! 模板1: #include #include #include #include #include #include #include #...
  • 在双目视觉立体空间重建中,会根据个相机中...根据物体图像坐标、相机内参、给定坐标系的相机外参,求取相机光轴线的方程,从而实现立体重建,本文主要是解决在已知三维空间两条直线求其最短距离、最近及算法实现。
  • axline函数作用是绘制一条无限长的直线。与 axvline/axhline相比,axline函数绘制的直线长度是无限的,直线可以是任意角度的直线。 axline函数的签名为: matplotlib.pyplot.axline(xy1, xy2=None, *, slope=None, *...
  • ACM计算几何---关于点直线的所有问题的模板 直接可以用#include&lt;bits/stdc++.h&gt; using namespace std; typedef long long ll; const double PI = 3.1415927; const double EPS=1e-10; //double类型...
  • 转载来自 最容易想到的就是试试把9个摆成规整的3行,如下图所示: 但只能画出8条线。 ...把第一行和第三行中间的往右移,这样减少了一条线(即图中虚线),但可以增加条线(即图中红线)
  • 求空间两条直线之间的距离

    万次阅读 2016-10-28 21:52:42
    1. 前言最近老板让写段空间匹配的代码, 其中涉及到求空间两直线之间的距离,写起来满费劲的, 这里做个记录。2. 处理思路空间两直线之间的位置关系主要可以分为: 重合, 平行, 相交, 异面。2.1 异面情形...
  • 直线一般方程为 A x + ...SVG中的直线通常是以坐标轴形式或者是两点形式表示的。 如果是以两点线段形式表示的,需要先求出直线方程的系数。 两点(x1,y1),(x2,y2)确定的直线方程为:(y1-y2)*x + (x2-x1)*y + (x1*y2...
  • 对称与轴对称图形 一知识 1什么叫轴对称 如果把一个图形沿着某一条直线折叠后能够与另一个图形重合那么这个图形关于 这条直线成轴对称这条直线叫做对称个图形中的对应叫做对称点 2什么叫轴对称
  • 主对角线对称
  •  假设直线的方程为如下表示。  T=K*S+B--------------------(1)  T=MS+D---------------------(2)   G(S1,T1),H(S2,T2) 表示的直线为:T=K*S+B  P(S3,T3),Q(S4,T4)表示的直线为: T=M*S+D  B=T-KS --...
  • Visio中图形关于轴线对称

    千次阅读 2019-03-04 07:48:44
    如图,先画出一条直线和一个矩形,在按住Ctrl,鼠标先选中轴线(图中直线),再选中矩形(Ctrl不要松)。 接着,排列下面的水平居中,这个道理其实就是将轴线当参考系,其他的图形以他为标准,进行水平居中。 ...
  • 到线段的最短距离, 线段与线段的关系, 直线的距离, 直线直线的关系, 线段与直线的关系, 直线间的距离, 线段间的距离
  • 问题的关键是求出这两条任意直线之间的最短距离,以及在这个距离上的线最接近坐标,判断该是否在线段AB和线段CD上。 首先将直线方程化为对称式,得到其方向向量n1=(a1,b1,c1),n2=(a2,b2,c2). 再将...
  • 空间直线向式

    千次阅读 2010-12-14 17:00:00
    如果个非零向量平行于一条已知直线,这个向量叫做这条直线的方向向量。容易知道,直线上任一向量都平行该直线的方向向量。 若直线通过定点,且它的方向向量为,求的方程。 设是直线上任意一点,则,且,从而 (1...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,700
精华内容 5,080
关键字:

两点关于一条直线对称