已知2点坐标求出此2点构成直线的角度 并求出再此之后新的不同的2点构成直线与之前直线的角度差或者弧度差
2011-11-15 10:32
821 查看
http://zhidao.baidu.com/question/200009663.html
分求 编程 c语言 已知2点求角度
检举
| 2010-11-23 14:20
提问者:myempty
| 悬赏分:160
| 浏览次数:531次
c c++语言里 已知2点坐标求出此2点构成直线的角度 并求出再此之后新的不同的2点构成直线与之前直线的角度差或者弧度差 回答正确后再追加100分
问题补充:
其实思路我有 和你的基本一样 但是写出的代码 总是不对 所有希望是源码
检举
| 2010-11-25 14:12
最佳答案
#include<stdio.h> #include<stdlib.h> #include<math.h> #define pi 3.1415926 struct point { double X; double Y; }; struct line { point A; point B; double deg; }; int main( ) { line lineA; line lineB; double tmp; printf("请输点坐标(x,y)构造第一条直线\n"); printf("第一点x与y:"); scanf( "%lf%lf", &lineA.A.X, &lineA.A.Y ); printf("第二点x与y:"); scanf( "%lf%lf", &lineA.B.X, &lineA.B.Y ); //求角度 tmp=(lineA.B.Y-lineA.A.Y)/(lineA.B.X-lineA.A.X); lineA.deg=atan(tmp); lineA.deg=lineA.deg*double(180)/pi; printf( "第一条直线斜线角度:%lf,%lf\n", tmp,lineA.deg ); printf("请输点坐标(x,y)构造第二条直线\n"); printf("第一点x与y:"); scanf( "%lf%lf", &lineB.A.X, &lineB.A.Y ); printf("第二点x与y:"); scanf( "%lf%lf", &lineB.B.X, &lineB.B.Y ); //求角度 tmp=(lineB.B.Y-lineB.A.Y)/(lineB.B.X-lineB.A.X); lineB.deg=atan(tmp); lineB.deg=lineB.deg*double(180)/pi; printf( "第二条直线斜线角度:%lf,%lf\n", tmp,lineB.deg ); printf( "两条直线角度差:%lf\n", lineA.deg-lineB.deg ); return 0; } /* atan等三角函数算出来的是pi形式的,看看45度的: printf("%f\n",tan(double(45)/double(180)*pi)); printf("%f\n",atan(1)*double(180)/pi); 写的真累,看你题目是C语言,所以没用C++类来写 用类来写,又好写,又好读,又不容易出错 point点(x,y)其实可以直接用COORD,又怕你没有数据结构COORD 比如: struct line { point A; point B; double deg; }; 改成 struct line { COORD dian; //COORD编译器数据结构dian有dian.X和dian.Y double deg; }; */
检举
| 2010-11-23 14:32
虽然分数很高,但还是懒得写代码,给出思路供参考 把第一个点作为原点,先求出目标点的相对位置及所在象限,用反sin函数求出角度 第二条直线需要平移到上面使用的原点,然后角度就出来了
检举
| 2010-11-23 20:07
做而论道
| 十四级
需要应用 math.h 中的计算函数,反正切即可求出角度。
赞同
0
|检举
| 2010-11-25 14:03
vqusu66
| 二级
#include<stdio.h> #define N 80/*宏定义N为80*/ int fun(char *str)/*声明调用函数fun*/ {int i,n=0,fg=1;/*定义变量i,n,fg*/ char *p=str;/*指针p指向字符数组*/ while (*p)/*while语句循环统计字符串长度*/ {n++; p++;} for (i=0;i<n/2;i++) if (str[i]==str[n-1-i]);/*for循环判断顺读和倒读是否都是一样的字符串并维持fg原来的值1*/ else {fg=0;/*否则改变fg的值为0,然后跳出循环*/ break;} return fg;}/*返回fg的值*/ main()/*主函数*/ {char s ;/*定义数组s*/ printf("Enter a string:"); gets(s);/*输入字符串*/ printf("\n\n");puts(s);/*空格后输出字符串*/ if(fun(s)) printf("YES\n");/*调用函数fun如果返回值是1输出YES*/ else printf("NO\n");/*否则输出NO*/ getch();/*此语句用来从键盘输入缓冲区读取下一个键盘输入字符的,返回值为读取的字符*/ } 如果还没解决你的问题,可以加我百度HI账号。
检举
| 2010-11-25 14:12
BlueWanderer
| 十一级
#include <stdio.h> #include <math.h> #define __pi 3.1415926535897932384626433832795 int main() { int x0, y0, x1, y1; scanf("%d%d", &x0, &y0); if (x0 != 0) { printf("%.4f\n", atan((double)y0 / x0) / __pi * 180); } else { puts("Input error."); return 0; } scanf("%d%d", &x1, &y1); if (x1 != 0) { printf("%.4f\n", (atan((double)y1 / x1) - atan((double)y0 / x0)) / __pi * 180); } else { puts("Input error."); } return 0; }
检举
| 2010-11-28 04:08
wacs5
| 十四级
/***************************************************************** *Author :wacs5 *DATE :20101128(YYYMMDD) *Email :wacs5@126.com *Function : 已知2点求角度(主要使用atan2函数) *Compiler :TC2.0通过(如果是VC++的话,去掉#include <conio.h>) * *另外getch()函数可以换成system("pause")语句. *Problem :http://zhidao.baidu.com/question/200009663.html *****************************************************************/ #include <stdio.h> #include <conio.h> #include <math.h> #ifndef M_PI #define M_PI 3.14159265358979323846 #endif typedef struct Point_tag { double x; double y; }Point; typedef struct Line_tag { Point p[2]; }Line; int main() { int i; Line L1,L2; double a1,a2; int PointInput(Point *p); /*点输入录入*/ int LineInput(Line *l); /*线输入录入*/ double rad2deg(double rad); /*弧度转角度*/ double LineAngle(Line *l); /*一条线(两个点)的角度*/ double TwoLineAngle(Line *l1,Line *l2); /*两条线的夹角*/ L1.p[0].x=0; L1.p[0].y=0; L1.p[1].x=1; L1.p[1].y=1; L2.p[0].x=1; L2.p[0].y=1; L2.p[1].x=1/2; L2.p[1].y=sqrt(3); /* LineInput(&L1); LineInput(&L2); */ a1=LineAngle(&L1); a2=TwoLineAngle(&L1,&L2); printf("a1=%lf\n",rad2deg(a1)); printf("a2=%lf\n",rad2deg(a2)); getch(); return 0; } int PointInput(Point *p) { scanf("%lf",&p->x); scanf("%lf",&p->y); return 0; } int LineInput(Line *l) { printf("Input point[0] coord:"); PointInput(&l->p[0]); printf("Input point[1] coord:"); PointInput(&l->p[1]); return 0; } double rad2deg(double rad) { return rad*180/M_PI; } double LineAngle(Line *line) { return atan2( line->p[1].y - line->p[0].y, line->p[1].x - line->p[0].x); } double TwoLineAngle(Line *l1,Line *l2) /*两条线夹角,化为两条线各自与x轴夹角之差*/ { return LineAngle(l2)-LineAngle(l1); }
检举
| 2010-12-2 19:13 热心网友
int fun(char *str)/*声明调用函数fun*/ {int i,n=0,fg=1;/*定义变量i,n,fg*/ char *p=str;/*指针p指向字符数组*/ while (*p)/*while语句循环统计字符串长度*/ {n++; p++;} for (i=0;i<n/2;i++) if (str[i]==str[n-1-i]);/*for循环判断顺读和倒读是否都是一样的字符串并维持fg原来的值1*/ else {fg=0;/*否则改变fg的值为0,然后跳出循环*/ break;} return fg;}/*返回fg的值*/
检举
| 2010-12-4 20:46
wuys825
| 一级
从高的抽象层面想问题,从具体的层面做事情! 给出方法: 设两点为p1(x1,y1),p2(x2,y2)则向量p1p2=(x2-x1,y2-y1). x轴的单位向量e=(1,0)则直线p1p2与x轴的所成角的为∠a,则: cos(∠a)=(x2-x1)/sqrt((x2-x1)^2+(y2-y1)^2) (1) 通过反余弦函数可求的 ∠a=acos((x2-x1)/sqrt((x2-x1)^2+(y2-y1)^2)) (2) 设第二条线于x轴所成角为∠b,通过式(2)可求出,则与第一条直线的夹角为∠c: ∠c=∠b-∠a. (3) 有了式(2)和(3)你还编不出相应的程序来吗?
相关文章推荐
- ORACLE 自定义函数实例,已知2点坐标求直线距离
- 已知旋转中心和旋转角度,获得旋转之后的一组点坐标
- sql删除字段中指定字符之前的字符串或者删除字段中指定字符之后的字符串
- 在圆内随机一个坐标点/已知圆心和点,求角度
- BeanPostProcessor 的使用,实现在对象初始化之前或者之后对对象进行操作
- 【原创】已知四个坐标点求其两条直线交点坐标
- android图片加载上面两个角有弧度,下面的没有,或者四个角的弧度不同的自定义控件
- 【原创】已知三个点坐标求其构成的三角形的内角大小
- 根据两个坐标来算弧度,并转换成角度进行旋转的代码
- Android 已知原点,角度,半径获取圆上坐标
- 1.空间中直线交点坐标问题,2.已知球面三点求球心问题以及Matlab实现
- 判断一条直线到另一条直线所构成的角度是逆时针还是顺时针方向。
- 已知A,B两点及C点(不在直线AB上)坐标,求在直线AB上距离A点距离为线段AC长度的点D坐标
- 已知圆心,半径,角度,求圆上的点坐标
- notepad++正则表达式删除某行某字符开始之前或者之后所有字符
- 正则表达式之位置指定(匹配表达式之前或者之后)附匹配以某内容开始,某内容结束的通用正则
- 已知两点和直线上的某点的Y值,求某点的x坐标
- 已知圆心,半径,角度,求圆上的点坐标。
- 已知圆心,半径,角度,求圆上的点坐标
- 在平面内,已知一个矩形的四个角坐标,将矩形绕中心点转动一个角度,求旋转后的角坐标.