将四个x,y坐标转换为质心、宽度、高度和方向(py)

2024-09-28 05:25:37 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有一个直角矩形的坐标列表coords = [(7, 354), (307, 339), (304, 296), (4, 311)]。我想把这四点转换成x,y,w,h,o格式。在

如何将x,y对的这些转换成质心,宽度,高度和方向?质心和宽度、高度都很容易计算。方向如何?在

我最理想的方法是在两者之间切换。例如convert_to_xywho()和{}

p1, p2 = end[:2]
p3, p4 = end[2:]
w = math.hypot(p2[0] - p1[0], p2[1] - p1[1])
h = math.hypot(p3[0] - p2[0], p3[1] - p2[1])
c = [[p1[0], p2[0], p3[0], p4[0]], [p1[1], p2[1], p3[1], p4[1]]]
centroide = (sum(c[0])/len(c[0]),sum(c[1])/len(c[1]))

关于如何找到方向有什么建议吗。并对x,y,w,h,o应用这样的方向以获得x,y对的列表

注意:我使用的是PyGame坐标系,原点在左上角。在


Tags: 列表len宽度高度math方向endsum
3条回答

在Android棉花糖中,您需要在运行时请求dangerous permissions,包括存储权限组。 我知道一个很好的图书馆可以让你的生活更轻松

您可以使用少量代码请求权限:

RxPermissions.getInstance(this)
.request(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.subscribe(granted -> {
    if (granted) { // Always true pre-M
       // I can write to the storage now
    } else {
       // Oups permission denied
    }
});

在安卓M上运行的设备,您不能直接将数据写入存储器。你需要得到允许

this链接可能会有所帮助

因此,应该在这里的运行时询问权限WRITE_EXTERNAL_STORAGE

public  boolean permissions() {
//cheeck id device is Android M 

 if (Build.VERSION.SDK_INT >= 23) {
    if(checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
            == PackageManager.PERMISSION_GRANTED) {
        //your permission is granted
        return true;
    } else {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
        return false;
    }
}
else {
 //permission is automatically granted on devices lower than android M upon installation

    return true;
}
}

您还需要重写onRequestPermissionsResult()回调方法。你可以在这里添加逻辑

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(grantResults[0]== PackageManager.PERMISSION_GRANTED){

    //Add your logic of saving a file to directory. 
}

}

希望有帮助:)

public class MyDevIDS extends AppCompatActivity {

        private static final int REQUEST_RUNTIME_PERMISSION = 123;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            if (CheckPermission(MyDevIDS.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                // you have permission go ahead
                createApplicationFolder();
            } else {
                // you do not have permission go request runtime permissions
                RequestPermission(MyDevIDS.this, Manifest.permission.WRITE_EXTERNAL_STORAGE, REQUEST_RUNTIME_PERMISSION);
            }
        }

        @Override
        public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults) {

            switch (permsRequestCode) {

                case REQUEST_RUNTIME_PERMISSION: {
                    if (grantResults.length > 0
                            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        // you have permission go ahead
                        createApplicationFolder();
                    } else {
                        // you do not have permission show toast.
                    }
                    return;
                }
            }
        }

        public void RequestPermission(Activity thisActivity, String Permission, int Code) {
            if (ContextCompat.checkSelfPermission(thisActivity,
                    Permission)
                    != PackageManager.PERMISSION_GRANTED) {
                if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
                        Permission)) {
                } else {
                    ActivityCompat.requestPermissions(thisActivity,
                            new String[]{Permission},
                            Code);
                }
            }
        }

        public boolean CheckPermission(Context context, String Permission) {
            if (ContextCompat.checkSelfPermission(context,
                    Permission) == PackageManager.PERMISSION_GRANTED) {
                return true;
            } else {
                return false;
            }
        }
    }

相关问题 更多 >

    热门问题