已知拱高和絃長,求弧長、半徑、角度
按鈕click事件程式碼:
private void btnCal_Click(object sender, EventArgs e)
{
if (txth.Text.Trim() == "")
{
errorProvider1.SetError(txth, "拱高不能為空!");
txth.Focus();
return;
}
if (txtw.Text.Trim() == "")
{
txtw.Focus();
errorProvider1.SetError(txtw, "弦長不能為空!");
return;
}
double h = Convert.ToDouble(txth.Text);
double w = Convert.ToDouble(txtw.Text);
double r = (Math.Pow(h, 2.0) + Math.Pow(w, 2.0) / 4.0) / (h * 2.0);
double a = 2 * Math.Asin(w / 2 / r); //第一法 注意這是個孤度值,不是微軟說的角度值,糾結之處吧!
// double a = Math.Acos(Math.Pow((r - h) / r,2) *2-1); //第二法
double l = a * r;
//以下為那個劣孤/優孤之處理
if (h > r)
{
l = 2 * Math.PI * r - l;
a = 2 * Math.PI - a;
}
lblr.Text = r.ToString();//顯示半徑
lbla.Text = (a * 180 / Math.PI).ToString();//轉為角度顯示
lbll.Text = l.ToString();//顯示孤長
}
限制文字框輸入的程式碼,相關文字框KeyPress與之相繫結即可
private void txt_KeyPress(object sender, KeyPressEventArgs e)
{
if ((e.KeyChar >= '0' && e.KeyChar <= '9') || e.KeyChar == '.' || (byte)(e.KeyChar) == 8)
{
}
else
{
e.Handled = true;
}
}
另外可加些處理,比如回車
private void txtw_KeyUp(object sender, KeyEventArgs e)
{
errorProvider1.SetError(txtw, "");
if (e.KeyCode == Keys.Enter) btnCal_Click(null, null);
}
private void txth_KeyUp(object sender, KeyEventArgs e)
{
errorProvider1.SetError(txth, "");
if (e.KeyCode == Keys.Enter) txtw.Focus();
}
第一次顯示則聚焦在第一個文字上
private void FormMain_Shown(object sender, EventArgs e)
{
txth.Focus();
}
有圖有真相:(注意三種不同的夾角)
廠里正好用上此類小程式的。