电阻和电抗的区别…和工作原理?
电阻——欧姆定律定义的参数:电压与电流之比,单位欧姆
sita直线模组(双向直线模组)
电抗——交流电流通过电感或者电容压降时,电压与电流之比,虚数表示,单位欧姆
阻抗——电阻与电抗的复合参数,用复数表示,实部为电阻,虚部为电抗,单位欧姆
电导——电阻的倒数,单位西门子
电纳——电抗的导数,单位西门子
导纳——电导与电纳复合参数,实部为电导,虚部为电纳,单位西门子在具有电阻、电感和电容的电路里,对交流电所起的阻碍作用叫做阻抗。阻抗常用Z表示。阻抗由电阻、感抗和容抗三者组成,但不是三者简单相加。阻抗的单位是欧。在直流电中,物体对电流阻碍的作用叫做电阻,世界上所有的物质都有电阻,只是电阻值的大小差异而已。电阻很小的物质称作良导体,如金属等;电阻极大的物质称作绝缘体,如木头和塑料等。还有一种介于两者之间的导体叫做半导体,而超导体则是一种电阻值几近于零的物质。但是在交流电的领域中则除了电阻会阻碍电流以外,电容及电感也会阻碍电流的流动,这种作用就称之为电抗,意即抵抗电流的作用。电容及电感的电抗分别称作电容抗及电感抗,简称容抗及感抗。它们的计量单位与电阻一样是欧姆,而其值的大小则和交流电的频率有关系,频率愈高则容抗愈小感抗愈大,频率愈低则容抗愈大而感抗愈小。此外电容抗和电感抗还有相位角度的问题,具有向量上的关系式,因此才会说:阻抗是电阻与电抗在向量上的和。对于一个具体电路,阻抗不是不变的,而是随着频率变化而变化。在电阻、电感和电容串联电路中,电路的阻抗一般来说比电阻大。也就是阻抗减小到最小值。在电感和电容并联电路中,谐振的时候阻抗增加到最大值,这和串联电路相反。阻抗是一个比电阻大的概念.阻抗包括感抗\容抗\电阻,感抗是电感(线圈)对交流电的阻碍能力,容抗是电容对交流电的阻碍能力,电阻是导体对稳恒电流的阻碍能力,不同阻抗的材料组合起来可以控制电路的电流\相位\波形,从而实现控制。电阻表示是纯电阻对电流的阻力,交流电在电阻(R)上的电压与电流的相位总是相同的。
电抗(X)由电感产生的感抗(Xl)和电容产生的容抗(Xc)组成,交流电在电抗上电压与电流的相位不相。在电感上,电压超前电流90度;在电容上,电压滞后电流90度。
X=ωL-(1/ωC)ω=2πff为交流电的频率。
总的阻抗:Z=R+jX称为复阻抗。
接触电阻,是指两个导体相接触时,在接触处产生的电阻(不用接触阻抗这个名字),用点焊、锡焊等方法可以有效地减小接触电阻。
节点阻抗、表面阻抗可能是在十分专业的领域里才会用到。对电感,有u=L*di/dt,在交流电i=Isinwt作用下,有
u=L*d(Isinwt)/dt=LIw(coswt)=IwLsin(wt+∏/2)=Usin(wt+sita)
显然U=IwL,即感抗为U/I=wL
同时sita=∏/2,即电压和电流存在∏/2的相位差
对电容,有i=C*du/dt,在交流电u=Usinwt作用下,有
i=C*d(Usinwt)/dt=CUw(coswt)=UwCsin(wt+∏/2)=Isin(wt+sita)
显然I=UwC,即感抗为U/I=1/wC
同时sita=∏/2,即电压和电流存在∏/2的相位差是虚数的单位,j就是90°。感抗是j*XL,就是说感抗和电阻差90°。容抗是-j*XC,就是说容抗和电阻差-90°。
等于说,电阻和电抗是三角形的两条直角边,是不能直接相加的。他们的阻抗就是斜边,是他们平方和再开根号。再从复数的范畴来理解J,乘以j (j=cos90+jsin90),就是旋转正的90度,除以j即乘以-j(-j=cos(-90)+jsin(-90)),就是旋转反的90度....这个刚好和正弦函数推倒出来的 电流比电压落后90(电感),电流比电压超前90(电容) 吻合
电阻——欧姆定律定义的参数:电压与电流之比,单位欧姆
电抗——交流电流通过电感或者电容压降时,电压与电流之比,虚数表示,单位欧姆
阻抗——电阻与电抗的复合参数,用复数表示,实部为电阻,虚部为电抗,单位欧姆
电导——电阻的倒数,单位西门子
电纳——电抗的导数,单位西门子
导纳——电导与电纳复合参数,实部为电导,虚部为电纳,单位西门子在具有电阻、电感和电容的电路里,对交流电所起的阻碍作用叫做阻抗。阻抗常用Z表示。阻抗由电阻、感抗和容抗三者组成,但不是三者简单相加。阻抗的单位是欧。在直流电中,物体对电流阻碍的作用叫做电阻,世界上所有的物质都有电阻,只是电阻值的大小差异而已。电阻很小的物质称作良导体,如金属等;电阻极大的物质称作绝缘体,如木头和塑料等。还有一种介于两者之间的导体叫做半导体,而超导体则是一种电阻值几近于零的物质。但是在交流电的领域中则除了电阻会阻碍电流以外,电容及电感也会阻碍电流的流动,这种作用就称之为电抗,意即抵抗电流的作用。电容及电感的电抗分别称作电容抗及电感抗,简称容抗及感抗。它们的计量单位与电阻一样是欧姆,而其值的大小则和交流电的频率有关系,频率愈高则容抗愈小感抗愈大,频率愈低则容抗愈大而感抗愈小。此外电容抗和电感抗还有相位角度的问题,具有向量上的关系式,因此才会说:阻抗是电阻与电抗在向量上的和。对于一个具体电路,阻抗不是不变的,而是随着频率变化而变化。在电阻、电感和电容串联电路中,电路的阻抗一般来说比电阻大。也就是阻抗减小到最小值。在电感和电容并联电路中,谐振的时候阻抗增加到最大值,这和串联电路相反。阻抗是一个比电阻大的概念.阻抗包括感抗\容抗\电阻,感抗是电感(线圈)对交流电的阻碍能力,容抗是电容对交流电的阻碍能力,电阻是导体对稳恒电流的阻碍能力,不同阻抗的材料组合起来可以控制电路的电流\相位\波形,从而实现控制。电阻表示是纯电阻对电流的阻力,交流电在电阻(R)上的电压与电流的相位总是相同的。
电抗(X)由电感产生的感抗(Xl)和电容产生的容抗(Xc)组成,交流电在电抗上电压与电流的相位不相。在电感上,电压超前电流90度;在电容上,电压滞后电流90度。
X=ωL-(1/ωC)ω=2πff为交流电的频率。
总的阻抗:Z=R+jX称为复阻抗。
接触电阻,是指两个导体相接触时,在接触处产生的电阻(不用接触阻抗这个名字),用点焊、锡焊等方法可以有效地减小接触电阻。
节点阻抗、表面阻抗可能是在十分专业的领域里才会用到。对电感,有u=L*di/dt,在交流电i=Isinwt作用下,有
u=L*d(Isinwt)/dt=LIw(coswt)=IwLsin(wt+∏/2)=Usin(wt+sita)
显然U=IwL,即感抗为U/I=wL
同时sita=∏/2,即电压和电流存在∏/2的相位差
对电容,有i=C*du/dt,在交流电u=Usinwt作用下,有
i=C*d(Usinwt)/dt=CUw(coswt)=UwCsin(wt+∏/2)=Isin(wt+sita)
显然I=UwC,即感抗为U/I=1/wC
同时sita=∏/2,即电压和电流存在∏/2的相位差是虚数的单位,j就是90°。感抗是j*XL,就是说感抗和电阻差90°。容抗是-j*XC,就是说容抗和电阻差-90°。
等于说,电阻和电抗是三角形的两条直角边,是不能直接相加的。他们的阻抗就是斜边,是他们平方和再开根号。再从复数的范畴来理解J,乘以j (j=cos90+jsin90),就是旋转正的90度,除以j即乘以-j(-j=cos(-90)+jsin(-90)),就是旋转反的90度....这个刚好和正弦函数推倒出来的 电流比电压落后90(电感),电流比电压超前90(电容) 吻合
椭圆成生算法
(两个帖子都回复了楼主)
只写步骤,不写代码了。
和楼主共通过,楼主也是这方面的专家,因此步骤就不写太详细了,只写几个关键点吧。
方法1:(最通常)
通过 sin 和 cos 乘两轴长在原点画出正向椭圆,然后倾斜、偏移即可。
这样需要考虑弧度的间隔,否则两点之间并不连续。而盲目的细分弧度,会加重运算负担。
在许多 CAD 软件中,是通过设置圆的内接 n 边形来代表圆的,就是用线段连接。
将 n 边型的取值增大,椭圆就会很平滑了。
问题还有,就是长轴端的弧度,点会分布的比较稀少,因为屏幕分辨率并不是很高,所以可以用 长轴/短轴 的比值,来非等步长的增加弧度取值。
方法2:(近似求解)
通过4条贝塞尔曲线,可以连接成一个近似的椭圆。每段贝塞尔曲线代表原轴向椭圆的1/2*PI弧度,这样做最大误差只有0.027%。
每条贝塞尔曲线的四个控制点可以通过椭圆的外接矩形运算得出。
以扫描线方法的实现:
与楼主沟通过程中,提到了以扫描线的形式实现椭圆绘制过程。
常规方法:
纵向一个像素的移动扫描线,计算其与椭圆的两个交点,并与上一条扫描线的两个交点通过直线连接。第一次和最后一次与椭圆相交需要连接两个交点。
这种方法比较麻烦。
采用缓冲区的解决办法:
许多游戏都使用绘图缓冲区,不过这里用来实现扫描线绘制。
在内存中创建一个 DC 设备,将所有的绘图都转移到该 DC 设备上,然后通过 DC 设备和屏幕设备之间简单的行复制就可以了。
这样应该就完美的解决了楼主的问题。
很简单。
先把椭圆放在原点,不旋转:
已知 x0,y0,x1,y1;
得:轴长 = sqrt((y1-y0)^2 + (x1-x0)^2)
另一 轴长已知 len.
半轴长 a = 0.5 * sqrt() ; b = 0.5 * len.
离心率 e = sqrt( 1 - (b/a) ^ 2);
原点 椭圆极坐标方程 r = b / sqrt(1-e^2* [cos(sita)]^2)
好啦,现在做椭圆转动,再做平移就可以了。
sita 可以给得很小,例如1度。
程序如下:
#include
#include
#include
main()
{double x0,y0,x1,y1;
double ox,oy;
double phi,sinphi,cosphi;
double pi;
double a,b,e,r,sita,sn,cn,xx,yy;
double x[360],y[360];
double len;
int i;
len = 2.0;
x0 = -1.0;
x1 = 3.0;
y0 = 1.0;
y1 = 5.0;
pi = 3.14158265358979;
a = 0.5 * sqrt( (y1-y0) * (y1-y0) + (x1-x0) * (x1-x0) );
b = 0.5 * len;
e = sqrt(1.0 - b * b / a / a);
ox = 0.5 * (x0+x1); // 椭圆中心点
oy = 0.5 * (y0+y1);
if (x1-x0 == 0) {phi = pi / 2.0;} else{
phi = atan ( (y1 - y0) / (x1 - x0));
}; // 椭圆倾斜角
sinphi = sin(phi);
cosphi = cos(phi);
for (i=0;i< 360; i++){
sita = pi / 180.0 * i ; // 极座标 sita
cn = cos (sita);
sn = sin (sita);
r = b / sqrt( 1.0 - e * e * cn * cn); // 极座标 r
x[i] = r * cn ;
y[i] = r * sn;
xx = x[i] * cosphi - y[i] * sinphi; // 转动
yy = y[i] * cosphi + x[i] * sinphi; // 转动
x[i] = xx + ox; // 平移
y[i] = yy + oy; // 平移
}for (i=0;i<360;i++) printf("%.4lf %.4lf 1.0\n",x[i],y[i]);
}填椭圆用 x[i],y[i],x[i+1],y[i+1] 与 ox,oy 填三角形或填直线就可以了。
直接给你源代码好了
void CTestView::MyDrawEllipse(CPoint start,CPoint end)
{CClientDC dc(this);
int a=abs(end.x-start.x);
int b=abs(end.y-start.y);
CPoint p;
p.x=int(start.x+end.x)/2;
p.y=int(start.y+end.y)/2;
int x=0,y=b;
double d1,d2;
d1=b*b+a*a*(-b+0.25);
dc.SetPixel(x+p.x,y+p.y,color);
dc.SetPixel(x+p.x,-y+p.y,color);
dc.SetPixel(-x+p.x,y+p.y,color);
dc.SetPixel(-x+p.x,-y+p.y,color);