主页
Top.Mail.Ru Yandeks.Metrika
论坛:“抢”;
当前存档:2002.07.29;
下载:[xml.tar.bz2];

向下

几何。 如何以给定角度旋转线段? 找到类似的分支


SPeller   (2002-07-03 09:34) [0]

大家好! 我自己无法达到的东西,如果已知段的开始和结束的坐标,如何以给定角度旋转片段。 我自己做了,但缺少其他东西。 请帮助。



MBo   (2002-07-03 09:51) [1]

相对于开始?



Kaban   (2002-07-03 09:58) [2]

为什么总是懒得搜索互联网。 通过关键词“转向”搜索Rambler。 这是第一篇谈论笛卡尔坐标系的文件:
http://faqs.org.ru/progr/graph/ddesign5.htm




Johnmen   (2002-07-03 09:58) [3]

在转向后找到两端坐标的意义上?



Виктор Щербаков   (2002-07-03 09:59) [4]

设C为点,rel。 你想要旋转段。
AB是细分市场。
找到中心在C和半径CA和CB中的圆的方程式:
x = R cos t,
y = R sin t。
找到横坐标轴与A点和B点所属的直线之间的角度。添加您想要旋转线段的角度。 将此角度替换为您找到的圆的方程,并获得旋转的线段的坐标。



Alx2   (2002-07-03 10:00) [5]

围绕原点旋转:
alpha - 旋转角度。
xn = -sin(alpha)* y + cos(alpha)* x;
yn = cos(alpha)* y + sin(alpha)* x;



Alx2   (2002-07-03 10:01) [6]

如果围绕任意点(x0,y0),那么它看起来像这样:
xn = -sin(alpha)*(y-y0)+ cos(alpha)*(x-x0)+ x0;
yn = cos(alpha)*(yyy0)+ sin(alpha)*(x-x0)+ y0;



SPeller   (2002-07-03 10:21) [7]

我很抱歉没有立即澄清 - 相对于细分市场的开始转向。



Виктор Щербаков   (2002-07-03 10:25) [8]

所以你实际上需要转变观点。
所以你采用公式Alx2©(03.07.02 10:01),然后继续。



SPeller   (2002-07-03 10:26) [9]

另一个问题是:如何通过段的已知坐标找到两个段之间的角度。 细分市场从一个点开始。



Alx2   (2002-07-03 10:29) [10]

cos(alpha)=(a,b)/(| a || b |)
a和b是向量。
(a,b) - 标量积。
| a | - 矢量模块。



RV   (2002-07-03 10:29) [11]

获取8-9-10类的几何
你可以看到别的东西,让它变得更容易



Alx2   (2002-07-03 10:31) [12]

或者以“咀嚼”的形式:
alpha = arccos(((x2-x1)*(x4-x3)+(y2-y1)*(y4-y3))/(sqrt((x2-x1)^2+(y2-y1)^2)*sqrt((x4-x3)^2+(y4-y3)^2)))
第一段具有坐标[x1,y1],[x2,y2]。
第二段有坐标[x3,y3],[x4,y4]



SPeller   (2002-07-03 10:31) [13]

2 RV©(03.07.02 10:29)

你打算去上学吗? 为什么我有这样的书? :)



SPeller   (2002-07-03 10:33) [14]

2 Alx2©(03.07.02 10:31)

我不需要咀嚼,我自己也有牙齿......



Alx2   (2002-07-03 10:34) [15]

> SPeller©(03.07.02 10:33)
那为什么不嚼? :)



Виктор Щербаков   (2002-07-03 10:54) [16]

SPeller©
分析几何(或类似)的过程没有读给你听?
在调查问卷中,它说“不完整更高”。 或者你是人文学科?



SPeller   (2002-07-03 11:16) [17]

2 Victor Shcherbakov©(03.07.02 10:54)

这并不意味着我必须完全记住分析几何的整个过程。 我没有硬盘在哪里写它而且它不会去任何地方。



Виктор Щербаков   (2002-07-03 11:32) [18]

SPeller©(03.07.02 11:16)
当然,不应该记住整个过程,但它应该知道在哪里可以找到必要的信息。
例如,我也不记得这些公式,但我知道这些事情是在angeme课程中研究的。 之后,在书中或在线查找它们 - 不超过3分钟。



Alx2   (2002-07-03 12:10) [19]

> SPeller©(03.07.02 10:33)
是的,我怎么知道你记得标量产品和模块的公式?
因此,咀嚼......



SPeller   (2002-07-03 12:23) [20]

2 Alx2

你的公式不起作用。
这是如何(感谢上帝来到我身边):

xn:= cos(角度/ 180 * 3.14)* l + pos.X1;
yn:= sin(角度/ 180 * 3.14)* l + pos.Y1; 其中l是段的长度。

这是相对于X轴成一定角度的旋转。



Виктор Щербаков   (2002-07-03 12:35) [21]


>这是围绕x轴以一定角度旋转。

旋转(在平面上)相对于一个点。
公式有效。



SPeller   (2002-07-03 12:52) [22]

2 Victor Shcherbakov©(03.07.02 12:35)

>公式有效。

然后尝试输入这样的记录(取自Alx2)并检查 实践会有什么结果呢。

xn:= cos(角度/ 180 * 3.14)* X2 + X1;
yn:= sin(角度/ 180 * 3.14)* X2 + Y1;

y = y0 = 0,因为 相对于X转

>旋转(在平面上)相对于一个点。

我无法想象你怎么能相对于一个点转一条直线。 要做到这一点,您必须至少将其连接到线的其中一个点并确定它们之间的角度。



SPeller   (2002-07-03 13:01) [23]

Vlomy写道,你可以在这里看到绘制这些公式:
http://spellersoft.narod.ru/sin.jpg



Виктор Щербаков   (2002-07-03 13:09) [24]


>我无法想象如何相对于一条直线
>分。

这是关于细分市场,但没关系。
当你骑在旋转木马上时,你在地面上的投影(我们假设这样的近似)相对于旋转木马中心在同一平面上的投影旋转。 即 相对于这一点。 有什么难以理解的?

SPeller©(03.07.02 13:01)
从这一点可以看出,你得到了错误的公式,但你正确地应用了它们并编写了正确的代码。



Alx2   (2002-07-03 13:12) [25]

> SPeller©(03.07.02 12:52)
:)
嗯,弧度的角度是设定的,你猜对了。
顺便说一句,你会考虑arccos,不要忘记它也被认为是弧度。 你写的是什么 - 它取代了相应的值。
PS
这些公式是标准的。



SPeller   (2002-07-03 14:28) [26]

2 Alx2©(03.07.02 13:12)

>嗯,弧度的角度设定,你猜对了。
不管。 我以度为单位设置角度,并以编程方式转换为弧度。 我知道很久了。 你会接受它并尝试应用你的公式并用它们绘制一个圆,从0传递到360度或从0传递到6,28弧度。

>顺便说一句,你会考虑arccos,不要忘记它也被认为是弧度
哦好吧?!

2 Victor Shcherbakov©(03.07.02 13:09)

>从此可以看出,你被赋予了错误的公式,但是你正确地应用它们并编写了正确的代码。
不,像......



Alx2   (2002-07-03 14:50) [27]

> SPeller©(03.07.02 14:28)
我试过了。 一切都在吸引人。
在定时器I挂起间隔10 ms。
x和y变量 - Form3字段
对于每个步骤,该点旋转10度。

Var counter:boolean = false;
程序TForm3.Timer1Timer(发件人:TObject);
Var xn,yn,x0,y0,alpha:double;
开始
y0:=高度/ 2;
x0:=宽度/ 2;
alpha:= 10 * Pi / 180;
xn:= -sin(alpha)*(y-y0)+ cos(alpha)*(x-x0)+ x0;
yn:= cos(alpha)*(y-y0)+ sin(alpha)*(x-x0)+ y0;
如果反击那么
canvas.Pixels [round(xn),round(yn)]:= clWhite
其他
canvas.Pixels [round(xn),round(yn)]:= clBlack;
counter:= not counter;
x:= xn;
y:= yn;
结束;

procedure TForm3.FormCreate(Sender:TObject);
开始
y:=高度/ 2 + 10;
x:=宽度/ 2 + 10;
结束;




Alx2   (2002-07-03 14:58) [28]

但有一段:
unit Unit3; 接口 使用 Windows,消息,SysUtils,变体,类,图形,控件,表单, 对话框,ExtCtrls; 类型 TForm3 = class(TForm) Timer1:TTimer; 程序Timer1Timer(发件人:TObject); 程序FormCreate(发件人:TObject); 私人 {私人声明} 公开 {公开声明} x1,y1,x2,y2:double; 结束; VAR Form3:TForm3; 履行 {$ R * .dfm} 程序旋转(Var x,y:double; x0,y0,alpha:double); Var xn,yn:double; 开始 xn:= -sin(alpha)*(y-y0)+ cos(alpha)*(x-x0)+ x0; yn:= cos(alpha)*(y-y0)+ sin(alpha)*(x-x0)+ y0; x:= xn; y:= yn; 结束; Var counter:boolean = false; 程序TForm3.Timer1Timer(发件人:TObject); Var x0,y0:Double; 开始 y0:=高度/ 2; x0:=宽度/ 2; Canvas.Pen.Color:= Color; Canvas.MoveTo(round(x1),round(y1)); Canvas.LineTo(round(x2),round(y2)); 旋转(x1,y1,x0,y0,10 * Pi / 180); 旋转(x2,y2,x0,y0,10 * Pi / 180); Canvas.Pen.Color:= clBlack; Canvas.MoveTo(round(x1),round(y1)); Canvas.LineTo(round(x2),round(y2)); 结束; procedure TForm3.FormCreate(Sender:TObject); 开始 x1:=宽度/ 2 + 10; y1:=高度/ 2 + 10; x2:= x1 + 20; y2:= y1 + 20; 结束; 结束。



SPeller   (2002-07-03 15:14) [29]

嗯,那么他知道.....但不管怎样,谢谢



Alx2   (2002-07-03 16:00) [30]

:)
最有可能的是,某处搞砸了......



Страницы: 1 整个分支

论坛:“抢”;
当前存档:2002.07.29;
下载:[xml.tar.bz2];

楼上









内存:0.66 MB
时间:0.065 c
1-95390
叶夫根尼
2002-07-16 09:36
2002.07.29
输入Str


3-95215
业余
2002-07-08 10:25
2002.07.29
再次过生日


3-95188
AlexanderG
2002-07-05 10:43
2002.07.29
如何拆除服务器


1-95437
Labutin
2002-07-16 21:31
2002.07.29
QuickReport


1-95448
strel
2002-07-16 20:09
2002.07.29
使用DLL时出错!!! 麻烦:)





南非荷兰语 阿尔巴尼亚人 阿拉伯语 亚美尼亚 阿塞拜疆 巴斯克 白俄罗斯 保加利亚语 加泰罗尼亚 简体中文 中国(繁体) 克罗地亚 捷克 丹麦语 荷兰人 英语 爱沙尼亚语 菲律宾人 芬兰 法文
加利亚西语 格鲁吉亚语 德语 希腊语 海地克里奥尔语 希伯来语 印地语 匈牙利 北日耳曼语 印度尼西亚人 爱尔兰语 意大利语 日本性玩偶 韩语 拉脱维亚 立陶宛 马其顿 马来语 马耳他语 挪威语
波斯语 波兰语 葡萄牙语 罗马尼亚 俄语 塞尔维亚 斯洛伐克 斯洛文尼亚 西班牙语 斯瓦希里 瑞典语 泰国人 土耳其 乌克兰 乌尔都语 越南人 威尔士语 意第绪语 孟加拉 波斯尼亚
宿务 世界语 古吉拉特语 豪萨语 苗族 伊博 爪哇 卡纳达语 高棉 老挝 拉丁语 毛利 马拉 蒙古人 尼泊尔 旁遮普 索马里 泰米尔人 泰卢固语 约鲁巴语
祖鲁
英文 Французский Немецкий Итальянский Португальский 俄文 Испанский