Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在椭圆形中绘制矩形_Javascript_Math_Trigonometry_Photoshop - Fatal编程技术网

Javascript 在椭圆形中绘制矩形

Javascript 在椭圆形中绘制矩形,javascript,math,trigonometry,photoshop,Javascript,Math,Trigonometry,Photoshop,在有人建议将其移至之前,请听我说完。我希望有人能仔细检查我的老化三角计算,用JavaScript在Photoshop中画一个椭圆形的矩形 我有一个圆,我想知道W和H的长度 这很简单: W=2(cosθ/r) H=2(sinθ/r) r是圆的半径 我需要知道的是椭圆的W和H的长度 以下是一些注意事项: 在这两种情况下,H的值相同。但很明显θ也发生了相应的变化 椭圆形的宽度可以认为是2r宽度的x倍 弦W和H始终分别为水平和垂直) 椭圆可以被认为是一个更宽的圆,而不是椭圆 W也是 W=2x(c

在有人建议将其移至之前,请听我说完。我希望有人能仔细检查我的老化三角计算,用JavaScript在Photoshop中画一个椭圆形的矩形

我有一个圆,我想知道W和H的长度

这很简单:

W=2(cosθ/r)

H=2(sinθ/r)

r是圆的半径

我需要知道的是椭圆的W和H的长度

以下是一些注意事项:

  • 在这两种情况下,H的值相同。但很明显θ也发生了相应的变化
  • 椭圆形的宽度可以认为是2r宽度的x倍
  • 弦W和H始终分别为水平和垂直)
  • 椭圆可以被认为是一个更宽的圆,而不是椭圆
W也是

W=2x(cosθ/r)

我不需要它是超精确的(小数点后1位),因为最终我将画一个椭圆形内的矩形,1个像素的差异不会被注意到

以及绘制椭圆形的代码:

// call the source document
var srcDoc = app.activeDocument;

var w = 120;
var h = 50;
selectThis(10,10,w, h);

function selectThis(top, left, right, bottom)
{
    // =======================================================
    var id1 = charIDToTypeID( "setd" );
    var desc1 = new ActionDescriptor();
    var id2 = charIDToTypeID( "null" );
    var ref1 = new ActionReference();
    var id3 = charIDToTypeID( "Chnl" );
    var id4 = charIDToTypeID( "fsel" );
    ref1.putProperty( id3, id4 );
    desc1.putReference( id2, ref1 );
    var id5 = charIDToTypeID( "T   " );
    var desc2 = new ActionDescriptor();
    var id6 = charIDToTypeID( "Top " );
    var id7 = charIDToTypeID( "#Pxl" );
    desc2.putUnitDouble( id6, id7, top );
    var id8 = charIDToTypeID( "Left" );
    var id9 = charIDToTypeID( "#Pxl" );
    desc2.putUnitDouble( id8, id9, left );
    var id10 = charIDToTypeID( "Btom" );
    var id11 = charIDToTypeID( "#Pxl" );
    desc2.putUnitDouble( id10, id11, bottom );
    var id12 = charIDToTypeID( "Rght" );
    var id13 = charIDToTypeID( "#Pxl" );
    desc2.putUnitDouble( id12, id13, right );

    var id14 = charIDToTypeID( "Elps" );
    desc1.putObject( id5, id14, desc2 );
    var id15 = charIDToTypeID( "AntA" );
    desc1.putBoolean( id15, true );

    executeAction( id1, desc1, DialogModes.NO );
}

首先,根据r和θ定义圆和椭圆的公式为

圆圈:

椭圆形:

分别给a和b水平和垂直尺寸的比例

并考虑以下三角形,假设三角形位于圆/椭圆

对于圆,随着θ的变化,半径(r)不会变化,因为它是常数,Δr将为0,因此Δx和Δy也将产生0。然而,对于椭圆来说是不同的,这两个方程都导出到它们的导数中,其结果如下所示

其中a=b=1表示圆

因此,新三角形的宽度和高度将如下所示:


通过将x+Δxy+Δy分别加倍,可以得到宽度(W)和高度(H)

实际上,圆和椭圆的三角形都有以下宽度和高度公式,即
x+Δx=(r+Δr)cos(t)
y+Δy=(r+Δr)sin(t)
,在圆的情况下,
Δw=Δh=Δr=0
。因此椭圆的公式非常复杂,因为它涉及垂直和水平刻度的另外两个变量。椭圆内有无限多个矩形。你需要什么具体的矩形?我投票结束这个问题,因为这是一个数学问题,这不是一个编程问题。@Bicker如果你认为这样做是正确的,请随意关闭它。@Ghouldool我的评论是在我以自定义原因投票关闭时自动生成的。如果其他两位投票人同意我的意见,问题将被关闭。如果不同意,则不会。