第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請教下該如何用C語言求一個坐標(biāo),要求該坐標(biāo)點(diǎn)是隨機(jī)到該菱形區(qū)域內(nèi)的某點(diǎn)???

請教下該如何用C語言求一個坐標(biāo),要求該坐標(biāo)點(diǎn)是隨機(jī)到該菱形區(qū)域內(nèi)的某點(diǎn)???

C
湖上湖 2022-12-14 18:14:02
即一個菱形圖形,左邊角點(diǎn)到右邊角點(diǎn)寬度為800,上邊角點(diǎn)到下邊角點(diǎn)高度為600
查看完整描述

3 回答

?
互換的青春

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個贊

#include "stdio.h"
#include "stdlib.h"
#include<time.h>

int x = 0, y = 0;

void ret_area(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4)
{
float r1, r2, r3, r4;
float b1, b2, b3, b4;
int sign = 1; //標(biāo)志
r1 = (y1 - y2) / (x1 - x2); //計算直線方程斜率r
r2 = (y2 - y3) / (x2 - x3);
r3 = (y3 - y4) / (x3 - x4);
r4 = (y4 - y1) / (x4 - x1);
b1 = y1 - r1 * x1; //計算直線方程常量b
b2 = y2 - r2 * x2;
b3 = y3 - r3 * x3;
b4 = y4 - r4 * x4;
srand((unsigned)time(NULL));
//由此得到的x橫坐標(biāo)一定能落在菱形區(qū)域內(nèi)
x = rand() % (x2 - x4) + x4; //菱形區(qū)域左右可取得的值
while(sign)
{
y = rand() % (y1 - y3) + y3; //菱形區(qū)域上下可取得的值
//以下四個條件讓y縱坐標(biāo)坐落在菱形區(qū)域內(nèi)
if(y < r1 * x + b1)
if(y > r2 * x + b2)
if(y > r3 * x + b3)
if(y < r4 * x + b4)
sign = 0;
}
}

int main()
{
printf("x = %d, y = %d\n", x, y);
//ret_area(3, 7, 5, 2, 2, 1, 1, 3); //測試
printf("x = %d, y = %d\n", x, y);
return 0;
}

ret_area函數(shù)參數(shù)值一定是順時針方向或者逆時針方向。(x1,y1)(x2,y2)(x3,y3)(x4,y4)表示12點(diǎn)鐘、3點(diǎn)鐘、6點(diǎn)鐘、9點(diǎn)鐘坐標(biāo)。

 


查看完整回答
反對 回復(fù) 2022-12-18
?
RISEBY

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個贊

通過你的形容,菱形應(yīng)該是類似◇來進(jìn)行擺放的吧。

逆時針設(shè)置菱形四個頂點(diǎn)(12點(diǎn)方向是A,9點(diǎn)方向是B,6點(diǎn)方向是C,3點(diǎn)方向D。
做直角坐標(biāo)系,以菱形中心點(diǎn)為O點(diǎn),四個點(diǎn)的坐標(biāo)分別是:A(0, 400), B(-300, 0), C(0, -400), D(300, 0) 

方法:按照逆時針方向遍歷這個菱形的每一條邊的兩個頂點(diǎn)(X1,Y1)和(X2,Y2),然后判斷給定點(diǎn)是否在這條邊矢量的左邊就可以了。
而判斷一個點(diǎn)是否在一個矢量的左邊,可利用矢量叉積。
設(shè)A(x1,y1),B(x2,y2),給定點(diǎn)是C(x3,y3),構(gòu)造兩條矢量邊:
AB=(x2-x1,y2-y1), AC=(x3-x1,y3-y1)
則AB和AC的叉積為(2*2的行列式):
|x2-x1, y2-y1|
|x3-x1, y3-y1|
值為:r = (x2-x1)(y3-y1) - (y2-y1)(x3-x1)
然后利用右手法則進(jìn)行判斷:
如果r > 0,則點(diǎn)C在矢量AB的左邊
如果r < 0,則點(diǎn)C在矢量AB的右邊
這樣就可以判斷點(diǎn)C與AB的相對位置了。然后按照逆時針方向,對菱形的每一條邊都如此判斷,如果每次都判斷出C左邊,那么就說明這個點(diǎn)在凸多邊形內(nèi)部了。

代碼:

#include "stdio.h"
#include "stdlib.h"

int main()
{
int coor[][2] = {0, 400, -300, 0, 0, -400, 300, 0}; //存儲四個頂點(diǎn)坐標(biāo)及初始化
int coor_dif[4][2] = {0}; //存儲上述的x2 - x1 以及 y2 - y1

int x_ran = 0; //存儲任意點(diǎn)坐標(biāo)
int y_ran = 0;

int a = 0; //存儲公式的計算項(xiàng)
int b = 0;

int flag = 0; //標(biāo)志,判斷該帶點(diǎn)是否在比對向量的左邊
char comm = 'g'; //循環(huán)控制指令
int i = 0; //循環(huán)輔助

for( ; i < 4; i ++) //把各點(diǎn)差值記錄下來
{
coor_dif[i][0] = coor[(i + 1)%4][ 0 ] - coor[ i ][ 0 ]; 
coor_dif[i][1] = coor[(i + 1)%4][ 1 ] - coor[ i ][ 1 ]; 
}

printf("Input the \"q\" to quit.\n");
while( comm != 'q')
{
x_ran = rand(1000); //隨機(jī)坐標(biāo)
y_ran = rand(1000);  
printf("The coordinate of the random point is (%d, %d).\n", x_ran, y_ran);  

i = 0;
while(i < 4)
{ //計算公式 r = (x2-x1)(y3-y1) - (y2-y1)(x3-x1)  
a = ( y_ran - coor[ i ][ 1 ] ) * coor_dif[ i ][ 0 ]; //a = (x2-x1)(y3-y1)
b = ( x_ran - coor[ i ][ 0 ] ) * coor_dif[ i ][ 1 ]; //b = (y2-y1)(x3-x1)
if( a - b >= 0)
{
flag = 1;
break;
}  
i++;
}
if(i == 4)
{
printf("Point (%d, %d) is in this diamond.\n", x_ran, y_ran);
}
comm = getchar();
}
return 0;
}


查看完整回答
反對 回復(fù) 2022-12-18
?
慕碼人8056858

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個贊

解題思路都在圖里了


查看完整回答
反對 回復(fù) 2022-12-18
  • 3 回答
  • 0 關(guān)注
  • 230 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號